有没有办法以编程方式连接excel文件?

时间:2008-12-03 23:28:20

标签: .net excel automation

场景:我们有一个Web系统可以“动态”自动生成office 2003 excel文件(使用2003 XML文件格式,而不是二进制格式。)这些文件确实保存在Web服务器上以用于各种事情。

现在,我们处于这样一种情况:客户真的希望我们采用这个过程生成的xls文件,并将它们粘合在一起形成一个大文件。 (主要是因为他们只能按“打印”一次。)

我认为.net框架必须有一些方法可以做到这一点(以及类似的东西),但我似乎无法取笑我需要的MSDN。

记录:.net 2.0,使用VB.net和ASP.net。如果需要,Excel可以安装在服务器上,但是在每个Web用户点击的后台打开excel的东西可能无法很好地扩展。 ;)

5 个答案:

答案 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"""