C# 用C语言打开Excel工作簿#

C# 用C语言打开Excel工作簿#,c#,excel,file-io,C#,Excel,File Io,在尝试通过C应用程序打开excel工作表时,我遇到了一个奇怪的问题。 例如,templatePath是C:\template.xls时,它使用如下内容 Workbook excel_workbook = this.excel.Workbooks.Open(templatePath, mMissingValue, false, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingVal

在尝试通过
C
应用程序打开excel工作表时,我遇到了一个奇怪的问题。 例如,
templatePath
C:\template.xls
时,它使用如下内容

Workbook excel_workbook = this.excel.Workbooks.Open(templatePath,
mMissingValue, false, mMissingValue, mMissingValue, mMissingValue, mMissingValue,
mMissingValue, mMissingValue, mMissingValue, mMissingValue,
mMissingValue, mMissingValue, mMissingValue, mMissingValue);
然后在一些操作中涉及到
excel\u工作簿
对象。问题是
excel\u workbook.name=template1
,而不是template,这导致在单击“保存”时显示
另存为
对话框。此行为从业务角度中断了工作流


有人愿意帮忙吗?注意,其他图纸工作正常

我不知道如何强制Excel不显示对话框,但您可以尝试使用或其他.NET组件而不是Excel automation来避免此类问题,并且很可能会获得一些性能改进

如果您想试用,可以查看ASP.NET的实时示例并下载免费试用版


免责声明:我拥有SpreadsheetGear LLC

无法阻止Excel(或其他Office应用程序)显示对话框窗口。实际上,Microsoft不建议在服务器端场景中使用Office应用程序。市场上有很多优秀的第三方组件可以做同样的工作(甚至更好)。从我大约一年前执行的一项比较测试来看,Spire.XLS for.NET从以下角度来看是最好的: 1.excel的读写 2.支持嵌入图像 3.结果Excel文件的大小非常小 4.方便的API,非常类似于Office的API 5.多线程和多进程支持

阅读更多:

您显式地为'ReadOnly'参数传递'false',因此这种行为很奇怪

我有两个想法:

(1) 您确定工作簿是.XLS文件而不是.XLT文件吗?如果是.XLT,如“C:\template.XLT”而不是“C:\template.xls”,则您看到的行为是正常的,因为您的工作簿是作为模板打开的。将扩展名更改为“.XLS”,您将获得所需的行为

(2) 如果无法使其按所需的方式运行,请将过程更改为调用“workbook.Open”,然后立即调用“workbook.SaveAs”,并将工作簿名称和/或文件路径位置设置为所需的任何位置。此后,用户(或通过代码)对“保存”的任何调用都将保存工作簿,而无需打开“另存为”对话框

更新

好的,其他想法:

您应该尝试手动打开工作簿,然后尝试保存它。你也有同样的问题吗?当此工作簿是唯一打开的工作簿时,还是仅当其他工作簿也打开时,才会发生这种情况?重命名工作簿是否有帮助

不过,底线是,这听起来确实像某种奇怪的腐败。如果以上这些都没有产生任何有趣的结果——或者即使它们产生了,您也可能希望从一本新的工作簿开始。从空白工作簿开始,使用相同的名称并将其放置在相同的位置。它现在可以工作了吗(至少在打开和保存方面)。然后尝试向其中添加数据和其他方面。这将是可行的,但您应该能够重新构建此工作簿并使其正常工作


--迈克

谢谢你的回答,但这并不是我想要的。问题是,打开的工作簿与路径中生成的工作表同名,但后缀为1。这意味着它是一个不同的实例,在单击“保存”(而不是另存为…)时会弹出“保存”对话框,而不是以静默方式保存文件。谢谢Mike(1)它是.XLS而不是.XLT(2)恐怕应用程序已经部署到了许多用户,并且在代码中更改重新部署新版本并不是那么容易。奇怪的是,它对其他工作表工作正常。所以我想知道这个问题的根本原因是什么,在不改变代码的情况下,是否有一个解决方案来解决它;这听起来确实像某种腐败。我在这里没有什么好主意,但我在上面的“更新”部分又提出了一些想法。