Foxtable(狐表)用户栏目专家坐堂 → 处理EXCEL


  共有9337人关注过本帖树形打印复制链接

主题:处理EXCEL

帅哥哟,离线,有人找我吗?
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/11 15:07:00 [显示全部帖子]

dim ws  = args(0)
dim wb  = args(1)
……


调用
For k As Integer=1 To wb.worksheets.Count
            output.show(1)
            If Wb.WorkSheets(k).Visible <> 0 Then        '如果sheet表为不隐藏时处理(0隐藏,-1为不隐藏
                Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k)
Functions.AsyncExecute("abc",Ws,wb  )
        End If '不处理隐藏sheet
Next


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/11 16:51:00 [显示全部帖子]

dim ws  = args(0)
dim wb  = args(1)
dim RowsMax as integer
……

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/11 20:30:00 [显示全部帖子]

没有规律。要看具体要做什么功能,实现什么业务逻辑。一般变量如果外部用不到的,就放到函数里面定义

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/12 11:48:00 [显示全部帖子]

1/2:基本就这样了
3、函数里定义的变量只能函数里使用,和外部没有关系,互不影响

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/12 14:20:00 [显示全部帖子]

那就作为参数传进去

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/12 16:31:00 [显示全部帖子]

和上面ws参数的用法完全一样。函数所有参数的传输方法都一样。建议还是认真理解一下帮助:http://www.foxtable.com/webhelp/topics/1486.htm,不要回我看过了,多看几遍吧

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:17:00 [显示全部帖子]

异步是在一个独立的进程里的,无法正常和外部的com组件进行通信。建议还是把对单个文件的处理逻辑都放到异步里,也就是下面循环的代码都放到异步里

For Each file In FileSys.GetFiles(path)
这里的内容都放到异步函数里处理
next

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:34:00 [显示全部帖子]

像24楼那样只把sheet传入函数,有没有问题?

dim ws  = args(0)
dim wb  = args(1)
……

调用
For k As Integer=1 To wb.worksheets.Count
            output.show(1)
            If Wb.WorkSheets(k).Visible <> 0 Then        '如果sheet表为不隐藏时处理(0隐藏,-1为不隐藏
                Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k)
Functions.AsyncExecute("abc",Ws,wb  )
        End If '不处理隐藏sheet
Next

如果也不行,那就没有办法了。或者考虑把表格数据先全部导进来在处理

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 17:17:00 [显示全部帖子]

把100个sheet拆分为100个execl文件,再处理

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 20:42:00 [显示全部帖子]

我也没有办法。网上搜了一下,这样说的

Excel本质上是一个单线程应用程序(从技术上讲,COM对象位于单线程单元中)。 这意味着任何COM访问都会自动编组到主线程,因此使用额外的线程进行COM调用没有任何好处。

对于您的用例,在一次对Range.Value的调用中获得整个数据数组,然后在不使用额外的COM调用的情况下进一步处理该数组将是有意义的。

另一种方法是直接读取Excel数据文件,而不与Excel应用程序进行交互。 为此,您可以对基于XML的文件格式(如ClosedXML)使用高级包装。


 回到顶部
总数 50 上一页 1 2 3 4 5 下一页