【发布时间】:2025-12-20 17:05:13
【问题描述】:
我有一个小问题,我无法在 * 上找到任何解决方案。 情况: 我有一个自动打开 EXCEL 应用程序的应用程序。当它立即打开时,会出现一个对话框,上面写着“xxx的文件格式和扩展名不匹配。文件可能已损坏或不安全......” 我正在尝试创建一个专注于这个正在运行的 EXCEL 应用程序的应用程序,然后点击“是”并使用 VERSION 2007 重新保存 Excel,这样该错误消息就不会再次出现了。
这是我目前所拥有的:
var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
var c = excelApp.ActiveDialog;
不确定如何使用 excelApp 变量在 YES 上执行单击事件。 我也试过了
foreach (Process proc in Process.GetProcesses())
{
if (proc.MainWindowTitle.Contains("Excel"))
....
}
十一月2017 年 6 月: 这是我目前所拥有的:
var oExcelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
Process[] processlist = Process.GetProcessesByName("Excel"); //Shows number of running Excel apps
foreach (Process theprocess in processlist) //foreach Excel app running
{
if (oExcelApp.Workbooks.Count >= 0) //for worbooks in each Excel app
{
foreach (Excel.Workbook wkb in oExcelApp.Application.Workbooks)
{
wkb.SaveAs(filePath, Excel.XlFileFormat.xlExcel8);
wkb.Close(true, null, null);
Marshal.FinalReleaseComObject(wkb);
}
oExcelApp.Workbooks.Close();
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
oExcelApp.Quit();
Marshal.ReleaseComObject(oExcelApp);
}
只有在开始时没有错误消息时才有效。如果进程自动打开 excel 并有错误消息显示这将引发异常,因为应用程序正忙于错误消息。
【问题讨论】:
-
我在尝试您的代码时遇到错误,但是当我将其更改为以下代码时,我没有收到错误,也没有对话框。
var excelApp = new Microsoft.Office.Interop.Excel.Application(); var x = excelApp.ActiveDialog; -
抱歉,我使用的是
using Excel = Microsoft.Office.Interop.Excel -
当您使用 XlFileFormat.xlExcel8 时,您必须使用 .xls 扩展名保存文件。水晶球说你使用 .xlsx,一种非常不同的格式。
-
不,我想将其保存为 XLS 扩展...唯一的问题是我什至没有进入内部 foreach 循环。它直接到
oExcelApp.Workbooks.Close();并引发异常 - 消息是“消息过滤器指示应用程序正忙。(来自 HRESULT 的异常:0x8001010A (RPC_E_SERVERCALL_RETRYLATER))”因为它停留在警报消息“文件格式和..."的扩展名
标签: c# excel interop dllimport