以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]使用merge功能的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=129700) |
||||
-- 作者:81538475 -- 发布时间:2019/1/4 9:35:00 -- [求助]使用merge功能的问题 merge excel表格的时候,数据量很大,想用下面链接方式做一个等待提示框。测试了半天也实现不了。 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=73365&skin=0 内部函数是现在是这样的。 Dim mg As New Merger Dim p As String Dim dlg As New OpenFileDialog dlg.Filter = "Excel文件|*.xls;*.xlsx" If dlg.ShowDialog =DialogResult.OK Then DataTables("考勤表").DeleteFor("") p = dlg.FileName Dim Book As New XLS.Book(p) mg.SourcePath = p mg.Format = "excel" \'指定格式 mg.SourceTableName = book.sheets(0).name & "$" \'指定要合并的表 mg.DataTableName = "考勤表" \'指定接收数据的表 mg.Merge() \'开始 vars("考勤表")= True Else Return Nothing End If 我是把代码切分程2段,分别放在内部函数和窗口按钮中。但是回报错。 [此贴子已经被作者于2019/1/4 9:41:45编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/1/4 9:39:00 -- 下面这段,写一个异步函数处理
DataTables("考勤表").DeleteFor("") p = dlg.FileName
Dim Book As New XLS.Book(p)
mg.SourcePath = p
mg.Format = "excel" \'指定格式
mg.SourceTableName = book.sheets(0).name & "$" \'指定要合并的表
mg.DataTableName = "考勤表" \'指定接收数据的表
mg.Merge() \'开始
vars("考勤表")= True
|
||||
-- 作者:81538475 -- 发布时间:2019/1/4 11:13:00 -- 测试单个导入表没有问题了。现在还要执行后面的代码就出问题了。 .NET Framework 版本:2.0.50727.8936 Foxtable 版本:2018.10.9.1 错误所在事件:自定义函数加载考勤 详细错误信息: 调用的目标发生了异常。 在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级。 按钮代码是 Dim dtb As New DataTableBuilder("考勤表") dtb.AddDef("考勤号码", Gettype(String), 20) dtb.AddDef("姓名", Gettype(String), 20) dtb.AddDef("日期", Gettype(String), 20) dtb.AddDef("签到时间", Gettype(String), 20) dtb.AddDef("签退时间", Gettype(String), 20) dtb.AddDef("迟到时间", Gettype(String), 20) dtb.AddDef("实到", Gettype(String), 20) dtb.AddDef("是否旷工", Gettype(String), 20) dtb.AddDef("例外情况", Gettype(String), 20) dtb.AddDef("补助", Gettype(String), 20) dtb.AddDef("加班", Gettype(String), 20) dtb.Build() dlg.Filter = "Excel文件|*.xls;*.xlsx" If dlg.ShowDialog =DialogResult.OK Then SetWaitFrm.ShowWaitFrm("加载中,请稍后","加载考勤") End If 内部函数为: Dim mg As New Merger DataTables("考勤表").DeleteFor("") pth = dlg.FileName Dim Book As New XLS.Book(pth) mg.SourcePath = pth mg.Format = "excel" \'指定格式 mg.SourceTableName = book.sheets(0).name & "$" \'指定要合并的表 mg.DataTableName = "考勤表" \'指定接收数据的表 mg.Merge() \'开始 vars("考勤表")= True Tables("test_Table2").DataSource = DataTables("考勤表") For Each r As Row In Tables("考勤表").rows Dim i = R.index If (r("签退时间") >= "22:00" Or (r("签退时间") >= "00:00" And r("签退时间") <= "04:00")) And Tables("考勤表").rows(i+1)("迟到时间") < "00:30" Then Tables("考勤表").rows(i+1)("迟到时间") = Nothing End If If r("实到") = "1" Then r("实到") = Nothing Else If r("实到") = "0" Then r("实到") = "1" End If Next With DataTables("考勤表") .DataCols.Add("迟到扣款",Gettype(Integer), "IIF(迟到时间> \'00:15\'and 迟到时间<= \'00:30\', 20 ,IIF(迟到时间> \'00:30\'and 迟到时间<= \'00:60\', 50 ,0))" ) End With DataTables("考勤表").datacols.Add("旷工扣款", Gettype(Double)) For Each r2 As DataRow In DataTables("考勤表").DataRows If r2("是否旷工")= "True" Then Dim fr2 As DataRow = DataTables("人员信息表").sqlFind("姓名 = \'" & r2("姓名") & "\' ") If fr2 IsNot Nothing Then r2("旷工扣款") = fr2("实发工资")/22/2 End If End If Next Dim g As New GroupTableBuilder("统计表1", DataTables("考勤表")) g.Groups.AddDef("姓名") g.Totals.AddDef("迟到扣款") g.Totals.AddDef("旷工扣款") g.Totals.AddDef("迟到时间", AggregateEnum.Count,"迟到次数") g.Totals.AddDef("实到","请假天数") g.Totals.AddDef("是否旷工", AggregateEnum.Count,"旷工次数") g.Totals.AddDef("补助", AggregateEnum.Count,"补助次数") g.Totals.AddDef("加班", AggregateEnum.Count,"加班次数") g.Build() With DataTables("统计表1") .DataCols.Add("加班费",Gettype(Double)) .DataCols.Add("全勤奖",Gettype(Double),"IIF(迟到次数 = \'0\' and 请假天数= \'0\' and 旷工次数 = \'0\',300 ,0 )" ) .DataCols.Add("总扣款",Gettype(Double), "迟到扣款 + 旷工扣款" ) End With Dim nl As new List(of DataRow) For Each tr As DataRow In DataTables("统计表1").DataRows \'---------------------加班计算 Dim fdj As DataRow = DataTables("人员信息表").SQLFind("姓名 = \'"& tr("姓名") & "\'") If fdj IsNot Nothing Then If fdj("状态") = "实习" OrElse fdj("状态") = "培训" Then tr("加班费") = tr("加班次数") * 150 + tr("补助次数") * 50 Else If fdj("状态") = "正式" OrElse fdj("状态") = "试用" Then tr("加班费") = tr("加班次数") * 200 + tr("补助次数") * 50 End If End If \'------------------迟到计算 If tr("迟到次数") < 3 Then Dim drs As List(Of DataRow) drs = DataTables("考勤表").Select("迟到时间 <>\'\'and 姓名 = \'"& tr("姓名") & "\'") If drs IsNot Nothing Then For Each kqr As DataRow In drs If kqr("迟到时间") >"00:60" Then nl.Add(kqr) End If Next If nl.Count = 0 Then tr("迟到扣款") = 0 End If End If End If Next Tables("test_Table1").DataSource = DataTables("统计表1") |
||||
-- 作者:有点甜 -- 发布时间:2019/1/4 11:18:00 -- 用异步函数、同步函数
http://www.foxtable.com/mobilehelp/scr/3273.htm
http://www.foxtable.com/mobilehelp/scr/3270.htm
不会做上传具体实例测试 |
||||
-- 作者:81538475 -- 发布时间:2019/1/4 11:57:00 -- 麻烦帮忙看看
[此贴子已经被作者于2019/1/4 11:57:28编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/1/4 12:12:00 -- 改成
Public Sub SetWaitFrmFun(ByVal obj As Object) |
||||
-- 作者:81538475 -- 发布时间:2019/1/4 14:39:00 -- 好了多谢了。如何让图片下面的字能够跟图片同时出现呢,现在是加载图片出现之后,过了一会字才会显示。 [此贴子已经被作者于2019/1/4 14:44:45编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/1/4 15:13:00 --
|