场景:我们有一个Web系统可以“动态”自动生成office 2003 excel文件(使用2003 XML文件格式,而不是二进制格式。)这些文件确实保存在Web服务器上以用于各种事情。
现在,我们处于这样一种情况:客户真的希望我们采用这个过程生成的xls文件,并将它们粘合在一起形成一个大文件。 (主要是因为他们只能按“打印”一次。)
我认为.net框架必须有一些方法可以做到这一点(以及类似的东西),但我似乎无法取笑我需要的MSDN。
记录:.net 2.0,使用VB.net和ASP.net。如果需要,Excel可以安装在服务器上,但是在每个Web用户点击的后台打开excel的东西可能无法很好地扩展。 ;)
答案 0 :(得分:3)
我不知道Excel文件是由什么组成的,但是至少可以用Excel可以阅读的更简单的格式开始吗? IE,从CSV文件开始,将它们连接在一起,然后将其转换为Excel格式。
在我看来,在此过程中尽可能晚地转换为Excel格式会更容易。
答案 1 :(得分:1)
所以您的用户想要追加每次生成的最新文件?或者只是在他们提出要求时将它们粘在一起?
编辑:
excel文件中有哪些数据?它可以暂时转换为更简单的格式,如csv?
即使你不能,也可以创建一个新文件,当你遍历每个文件中的每一行时,你可以将它写入新文件。这里的问题是,如果您在单元格中有任何功能,那么这些功能将丢失,因为您基本上只是复制数据。
除此之外,您还必须使用Excel Interop。虽然我知道它很痛苦,并且它实际上不支持MS自动化,但我们已经设法创建了非常可靠的自动化系统作为Web服务。
答案 2 :(得分:1)
非常确定.Net框架没有你想要的东西,你必须手动创建它。您可以通过Excel互操作执行此操作:
来自MSDN的Microsoft.Office.Interop.Excel
编辑:为了让您有所期待,可能会感到很痛苦! :X
答案 3 :(得分:1)
1)打开每个XML文件 2)为每个工作表获取工作表XML 3)将所有工作表XML插入到新的“包装器”Excel 2003 XML文档中 4)从Web请求中返回文档。
确保工作表具有唯一的名称。
我会避免使用2007 XML格式,因为您正在处理更容易处理的2003格式。
答案 4 :(得分:1)
或许ADO适合?这是一个脚本示例。
strXLToOpen = "C:\Docs\ltd.xls"
strXLToImport = "C:\Docs\ltd2.xls"
Set cn = CreateObject("ADODB.Connection")
''EDIT I not that MSDASQL is deprecated by Microsoft, so
''Please see below.
With cn
.Provider = "MSDASQL"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & strXLToOpen & "; ReadOnly=False;"
.Open
End With
strSQL = "INSERT INTO [Sheet2$] (H1, H2) " _
& "SELECT H1, H2 FROM [Sheet2$] IN '' " _
& "'Excel 8.0;database=" & strXLToImport & "';"
cn.Execute strSQL
更多信息:http://support.microsoft.com/kb/257819/EN-US/
http://support.microsoft.com/kb/278973
编辑评论。
这适合吗?它来自:http://www.codemaker.co.uk/it/tips/ado_conn.htm#ODBCDriverForExcel
cn.Open "Driver={Microsoft Excel Driver (*.xls)};" & _
"DriverId=790;" & _
"DBQ=" & strXLToOpen & "; ReadOnly=False;" & _
"DefaultDir=c:\somepath"
您也可以将Jet驱动程序与Excel一起使用。
编辑评论#2
我已经使用.Net测试了这个连接字符串,它似乎有效:
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Docs\Test.xls;" & _
"Mode=ReadWrite;Extended Properties=""Excel 8.0;HDR=No"""