c#Excel应用程序文件格式问题
我有一个小问题,我无法找到任何关于StackOverFlow的解决方案。 情况: 我有一个自动打开EXCEL应用程序的应用程序。当它立即打开时,会出现一个对话框,显示“xxx的文件格式和扩展名不匹配。该文件可能已损坏或不安全…” 我正在尝试创建一个专注于此运行的EXCEL应用程序的应用程序,并点击“是”,然后用2007版重新保存EXCEL,这样就不会再次出现此错误消息 以下是我到目前为止的情况:c#Excel应用程序文件格式问题,c#,excel,interop,dllimport,C#,Excel,Interop,Dllimport,我有一个小问题,我无法找到任何关于StackOverFlow的解决方案。 情况: 我有一个自动打开EXCEL应用程序的应用程序。当它立即打开时,会出现一个对话框,显示“xxx的文件格式和扩展名不匹配。该文件可能已损坏或不安全…” 我正在尝试创建一个专注于此运行的EXCEL应用程序的应用程序,并点击“是”,然后用2007版重新保存EXCEL,这样就不会再次出现此错误消息 以下是我到目前为止的情况: var excelApp = (Excel.Application)Marshal.GetActiv
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年11月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并显示错误消息,则会引发异常,因为应用程序正在处理错误消息。我不知道有什么方法可以准确地执行您所描述的操作—在应用程序中截取对话框 我认为您首先要做的是让Excel挂起警告。您可以通过将
DisplayAlerts
属性修改为false来完成此操作
var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
excelApp.DisplayAlerts = false;
// This should not give you any warnings
excelApp.Workbooks.Open("c:/cdh/test.xls");
完成后,将事情恢复原状:
excelApp.DisplayAlerts = true;
我不知道有什么方法可以精确地完成您所描述的——在应用程序中拦截对话框 我认为您首先要做的是让Excel挂起警告。您可以通过将
DisplayAlerts
属性修改为false来完成此操作
var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
excelApp.DisplayAlerts = false;
// This should not give you any warnings
excelApp.Workbooks.Open("c:/cdh/test.xls");
完成后,将事情恢复原状:
excelApp.DisplayAlerts = true;
您好,您可以创建另一个应用程序,您可以在其中编写Excel关闭警报框的逻辑,并从主应用程序执行
foreach (Process proc in Process.GetProcesses())
{
if (proc.MainWindowTitle.Contains("Excel"))
....
},
因此,关闭此警报框无需用户交互,
您可以在数据库中保存不同的警报消息,并检查该消息是否出现在警报框中。您可以关闭嗨,您可以创建另一个应用程序,在该应用程序中,您可以编写Excel关闭警报框的逻辑,并从主应用程序执行
foreach (Process proc in Process.GetProcesses())
{
if (proc.MainWindowTitle.Contains("Excel"))
....
},
因此,关闭此警报框无需用户交互,
您可以在数据库中保存不同的警报消息,并检查此消息是否出现在警报框中。您可以关闭谢谢大家的帮助。我能够绕过这个问题,并使用REGEDIT禁用Microsoft Excel应用程序的所有警报。这是扭转这种局面的唯一办法。只是发布一个答案来帮助处于相同情况的其他人:
谢谢大家的帮助。我能够绕过这个问题,并使用REGEDIT禁用Microsoft Excel应用程序的所有警报。这是扭转这种局面的唯一办法。只是发布一个答案来帮助处于相同情况的其他人:
我在尝试您的代码时出错,但当我将其更改为以下内容时,我没有收到错误,也没有对话框
var excelApp=new Microsoft.Office.Interop.Excel.Application();var x=excelApp.ActiveDialog代码>哦,很抱歉,我正在使用使用Excel=Microsoft.Office.Interop.Excel
当您使用XlFileFormat.xlExcel8时,必须使用.xls扩展名保存文件。Crystal ball说您使用的是.xlsx,一种非常不同的格式。不,我想将其另存为XLS扩展名。。。唯一的问题是我甚至没有进入内部foreach循环。它直接进入oExcelApp.Workbooks.Close()
并引发异常--消息为“消息筛选器指示应用程序正忙。(HRESULT中的异常:0x8001010A(RPC_E_SERVERCALL_RETRYLATER)),因为它卡在警报消息“文件格式和扩展名…”上。我在尝试代码时出错,但是当我将其更改为以下内容时,我没有得到错误,也没有对话框var excelApp=new Microsoft.Office.Interop.Excel.Application();var x=excelApp.ActiveDialog代码>哦,很抱歉,我正在使用使用Excel=Microsoft.Office.Interop.Excel
当您使用XlFileFormat.xlExcel8时,必须使用.xls扩展名保存文件。Crystal ball说您使用的是.xlsx,一种非常不同的格式。不,我想将其另存为XLS扩展名。。。唯一的问题是我甚至没有进入内部foreach循环。它直接进入oExcelApp.Workbooks.Close()
并引发异常--消息是“消息筛选器指示应用程序正忙。(HRESULT中的异常:0x8001010A(RPC_E_SERVERCALL_RETRYLATER)),因为它卡在警报消息“文件格式和扩展名…”上,似乎不起作用。仅因为其他应用程序在完成某个过程后自动打开EXCEL应用程序。我可以在运行此程序之前关闭所有正在运行的EXCEL应用程序,但似乎无法关闭警报,因为只有在完成某个进程后才会触发此进程,到那时关闭警报已为时过晚。它似乎不起作用。仅因为其他应用程序在完成某个过程后自动打开EXCEL应用程序。我可以在运行此程序之前关闭所有正在运行的EXCEL应用程序,但似乎无法关闭警报,因为只有在完成某个进程后才会触发此进程,到那时关闭警报已经太晚了。