以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 如何以带有宏得EXCEL为模板制作报表?[已解决]  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40840)

--  作者:pfj511
--  发布时间:2013/10/1 16:42:00
--  [求助] 如何以带有宏得EXCEL为模板制作报表?[已解决]

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

 

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

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

--  作者:有点甜
--  发布时间:2013/10/1 16:52:00
--  

 没试过有宏的情况,机子上暂无excel可操作。

 

 在模板上,如果宏是不需要的,就不要加入……上传一个有宏的excel模板看看。


--  作者:pfj511
--  发布时间:2013/10/1 17:03:00
--  

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

 

 

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

 

 

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

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

--  作者:有点甜
--  发布时间:2013/10/1 17:09:00
--  

 我测试了上面的那个出库单.xls,可以导入,可以合并,也可以作为excel模板使用。


--  作者:pfj511
--  发布时间:2013/10/1 17:10:00
--  

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

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

--  作者:有点甜
--  发布时间:2013/10/1 17:14:00
--  

 导出的时候,是会忽略宏的,我没有安装excel,无法测试是否有宏。

 

 如果你果真要宏,可以变通一下。就是不使用模板生成,你直接打开有宏的excel,往里面填值。

 

 http://www.foxtable.com/help/topics/1144.htm

 http://www.foxtable.com/help/topics/1148.htm


--  作者:pfj511
--  发布时间: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
--  发布时间:2013/10/2 21:31:00
--  

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