Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 有没有一种方法可以通过编程连接excel文件?_.net_Excel_Automation - Fatal编程技术网

.net 有没有一种方法可以通过编程连接excel文件?

.net 有没有一种方法可以通过编程连接excel文件?,.net,excel,automation,.net,Excel,Automation,场景:我们有一个web系统,它可以“动态”自动生成office 2003 excel文件(使用2003 XML文件格式,而不是二进制格式)。这些文件会保存在web服务器上,用于各种用途 现在,我们遇到了这样一种情况,客户希望我们将这个过程生成的xls文件粘在一起,形成一个大文件的一张纸。(主要是为了让他们只能按一次“打印”。) 我假设.net框架一定有办法做到这一点(以及类似的事情),但我似乎无法从MSDN中挑出我需要的东西 对于记录:.net 2.0,使用VB.net和ASP.net。如果需要

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

现在,我们遇到了这样一种情况,客户希望我们将这个过程生成的xls文件粘在一起,形成一个大文件的一张纸。(主要是为了让他们只能按一次“打印”。)

我假设.net框架一定有办法做到这一点(以及类似的事情),但我似乎无法从MSDN中挑出我需要的东西


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

那么您的用户是否希望附加每次生成的最新文件?或者只是在他们提出请求时把他们粘在一起

编辑:

excel文件中有什么类型的数据?是否可以临时转换为更简单的格式,如csv

即使不能,也可以创建一个新文件,在循环遍历每个文件中的每一行时,可以将其写入新文件。这里的问题是,如果单元格中有任何函数,这些函数将丢失,因为您基本上只是复制数据


除此之外,您还必须使用Excel互操作。虽然我知道这很痛苦,而且自动化实际上不支持MS,但我们已经成功地创建了一个非常可靠的自动化系统,作为一个web服务。

我不知道Excel文件由什么组成,但是否有可能至少从一个更简单的格式开始我可以读取?即,从CSV文件开始,将它们连接在一起,然后将其转换为Excel格式


在我看来,在转换过程中尽可能晚地转换为Excel格式会更容易。

非常确定.Net framework没有您想要的格式,您必须手动创建它。您可以通过Excel互操作来执行此操作:

来自MSDN

编辑:为了让您有一些期待,使用它可能会很痛苦!:X

1)打开每个XML文件。
2) 抓取每个工作表的工作表XML。
3) 将所有工作表XML插入新的“包装器”Excel 2003 XML文档。
4) 从web请求返回文档

确保工作表具有唯一的名称


我会避免使用2007 XML格式,因为您使用的是更易于处理的2003格式。

也许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
进一步资料:

编辑并重新评论

这套衣服好吗?它来自:

您还可以将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"""

XML格式为2007(但在使用2007兼容包后,您可以在2003年打开XML文件)。事实上,2003年有自己的XML格式。相信我,这让任何人都感到惊讶。这不是答案,但我很好奇为什么excel文件首先被创建?如果它只是一个用户在线查看或打印的报告,为什么不使用HTML?好吧……简短的回答是,用户下载并实际在ex中编辑它们cel-有时。而且,这一过程是几年前编写的,当时他们认为一次只需要一个文件/页。现在他们正在寻找一种方法,一次打印/下载20页。本质上,当另一个用户点击另一个按钮时,该过程会将目录中的所有xls文件连接到一个新文件中。这就是pr但是这些连接字符串在.net 2.0或excel 2003 xml文件下不起作用。有没有可能是ado.net版本?有时你看不到森林,而你看到的只是树木。
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Docs\Test.xls;" & _
"Mode=ReadWrite;Extended Properties=""Excel 8.0;HDR=No"""