Foxtable(狐表)用户栏目专家坐堂 → [求助] 如何以带有宏得EXCEL为模板制作报表?[已解决]


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

主题:[求助] 如何以带有宏得EXCEL为模板制作报表?[已解决]

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


加好友 发短信
等级:婴狐 帖子:32 积分:398 威望:0 精华:0 注册:2012/10/20 18:09:00
[求助] 如何以带有宏得EXCEL为模板制作报表?[已解决]  发帖心情 Post By:2013/10/1 16:42:00 [显示全部帖子]

今天试了下? 不带宏得话,可以正常打开 ,加上 自运行宏 auto_open() 就打不开了 提示 EXCEL crush 错误

 

如何 解决这一问题,大侠们提供个思路,(以前宏得作用是,自动计算修约,自动合并单元格,自动设置打印区域,自动随机数)

[此贴子已经被作者于2013-10-2 21:31:03编辑过]

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


加好友 发短信
等级:婴狐 帖子:32 积分:398 威望:0 精华:0 注册:2012/10/20 18:09:00
  发帖心情 Post By:2013/10/1 17:03:00 [显示全部帖子]

测试下这个 ! 学习文件里面的 XLS我改了下  

 

 

 刚才 我 测试了下 可 以正常打开报表,,但是 新生成的 出库单报表文件  已经没有宏了   所以无法运行设定好的宏命令!

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:出库单.xls

[此贴子已经被作者于2013-10-1 17:08:58编辑过]

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


加好友 发短信
等级:婴狐 帖子:32 积分:398 威望:0 精华:0 注册:2012/10/20 18:09:00
  发帖心情 Post By:2013/10/1 17:10:00 [显示全部帖子]

模板文件有宏  ,新导出的就没有了   你仔细看下!

[此贴子已经被作者于2013-10-1 17:10:01编辑过]

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


加好友 发短信
等级:婴狐 帖子:32 积分:398 威望:0 精华:0 注册:2012/10/20 18:09:00
  发帖心情 Post By:2013/10/1 17:22:00 [显示全部帖子]

直接填数据 我测试过了  代码执行效率有点慢 打开文件 () -> 填数据 ->保存文件 > 打开文件(二次打开才运行宏)

 

总感觉 打开 很慢 起码2秒 才能打开 预览!

 

代码如下

 

FileSys.CopyFile(ProjectPath & "Reports\" & Tables("主界面_table1").current("样品名称") & ".xls",ProjectPath & "temp\" & Tables("主界面_table1").current("自动编号") & ".xls",True)
Dim file As String = ProjectPath & "temp\" & Tables("主界面_table1").current("自动编号") & ".xls"
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(file)'打开模板文件
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets("数据")
ws.Select
Ws.Range("F4").value=  Tables("主界面_table1").Current.DataRow.GetParentRow("工程")("工程名称")
Ws.Range("F5").value = Tables("主界面_table1").Current("委托单位")
Ws.Range("F6").value = Tables("主界面_table2").Current("生产厂家")
Ws.Range("J4").value = Tables("主界面_table1").Current.DataRow.GetParentRow("工程")("送样人员") & "  " & Tables("主界面_table1").Current.DataRow.GetParentRow("工程")("上岗证号")
Dim jz As Integer = 0
If Tables("主界面_table2").Compute("count(见证)")> 0 Then
    Ws.Range("J7").value = "是"
    Ws.Range("J8").value = Tables("主界面_table1").Current.DataRow.GetParentRow("工程")("监理人员")
    Ws.Range("J9").value = Tables("主界面_table2").Compute("count(见证)")
End If
Ws.Range("L4").value = Tables("主界面_table1").Current("自动编号")
Ws.Range("L5").value = Tables("主界面_table1").Current("收样组数")

Ws.Range("L6").value = Tables("主界面_table1").Current("录入日期")
Ws.Range("L7").value = Tables("主界面_table1").Current("报告日期")
Dim i As Integer
For  i=0 To  Tables("主界面_table1").Current("收样组数")-1
    Ws.Range("D" & 12+i).value =Tables("主界面_table2").Rows(i)("样品状态")
    Ws.Range("E" & 12+i).value =Tables("主界面_table2").Rows(i)("取样部位")
Next
Wb.Save
App.Visible = True
Wb.WorkSheets("报告").PrintPreview
App.Visible = False

App.Quit

 

 

但是PrintPreview 方式打开的话 依然不能 运行宏,只有

 Dim Proc As New Process '定义一个新的Process
Proc.File = file '指定要打开的文件
Proc.Start()

才能运行宏,但是不晓得怎么预览

 

 

估计要用这个方法才行

 

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=5152&authorid=120

 

foxls.mExcel.openxls("D:/abc.xls")
源代码
Imports Microsoft.Office.Interop
Public Module mExcel
    Sub openxls(ByVal FilePath As String)
        If IO.File.Exists(FilePath) Then
            Dim app As New Excel.Application
            Dim book As Excel.Workbook = app.Workbooks.Open(FilePath)
            Dim sheet As Excel.Worksheet = book.Sheets.Item(1)
            app.Visible = True
            sheet.PrintPreview()
            book.Close()
            app.Quit()
        Else
            MsgBox("文件不存在!", MsgBoxStyle.OkOnly)
        End If
    End Sub
End Module

 

[此贴子已经被作者于2013-10-1 17:31:10编辑过]

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


加好友 发短信
等级:婴狐 帖子:32 积分:398 威望:0 精华:0 注册:2012/10/20 18:09:00
  发帖心情 Post By:2013/10/2 21:31:00 [显示全部帖子]

找到问题所在了,是EXCEL本身的问题,因为公式太多数据量庞大的话,每次填充数据会引起自动重算,这样非常影响整体执行效率,改为保存时重算,就可以了!


 回到顶部