【问题标题】:System.Runtime.InteropServices.COMException (0x800A03EC) errorSystem.Runtime.InteropServices.COMException (0x800A03EC) 错误
【发布时间】:2013-03-07 17:10:09
【问题描述】:

我遇到了错误

System.Runtime.InteropServices.COMException (0x800A03EC)

对于我下面的 C# 代码,我正在尝试在此处保存工作表,

但同样适用于本地环境:Office 2010、Windows 2003

不适用于服务器:Office 2003、Windows 2003

代码:

wBook = xCel.Workbooks.Open(ExcelPath);                
wSheet = (Excel.Worksheet)wBook.Worksheets.get_Item(1);                    
wSheet.Copy(Type.Missing, Type.Missing);                    
wSheet = (Excel.Worksheet)wBook.Sheets[1];
wSheet.SaveAs(ExcelCopyPath);   

这里有什么问题?保存时失败。 在其他一些服务器中,它会保存,但其中包含我不想要的宏。

示例跟随错误图片

【问题讨论】:

  • 你为什么要睡觉线程?为什么要两次释放 com 对象?
  • 你的空 catch 块会吞下任何异常,并且很难找出问题所在!你能在你的服务器上调试吗?

标签: c# excel com vsto


【解决方案1】:

在服务器上使用办公自动化不是很好的做法,您可以考虑像 epplus 这样的替代方案。

对于您的问题,office 2003 需要 Microsoft.Office.Excel 版本 11,而 office 2010 需要版本 14。我猜在你的项目中你会添加版本 14,因此它适用于 word 2010,但不适用于带有 office 2003 的服务器

尝试后期绑定http://support.microsoft.com/kb/302902,如果解决了你的问题,算作迭代问题

【讨论】:

  • 我已经在我的开发机器上将使用 2010 编写的应用程序部署到运行 2007 的计算机上,之前没有任何问题,我怀疑这是因为 OP 正在尝试做一些在 2010 年有效但在 2003 年无效的事情,但是空的 catch 块让我们无法看到出了什么问题!
  • 您在项目中引用的互操作版本是什么?
  • @BrijeshMishra:它是 VS2010 中指定的“1.3.0.0”版本。
  • +1 指出办公自动化不一定是最好的解决方案 - 我通过 nuget 发现 NPOI 是一个更容易实施的解决方案
  • 但是EPPLUS不支持excel 2003?!
【解决方案2】:

您可以使用我编写的 belov 代码。我在另一个项目中尝试过。它正在工作

编辑:

您的错误的原因可能是您的 excel 版本与您在代码中使用的不同。

Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;

xlApp = new Microsoft.Office.Interop.Excel.Application(); 
xlWorkBook = xlApp.Workbooks.Add(misValue); 
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);    

xlWorkSheet.Cells[1, 1] = "xxx";
xlWorkSheet.Cells[2, 1] = "yyy";


xlWorkSheet.get_Range("A1", "A7").Borders.Weight = 2;
xlWorkSheet.get_Range("A1", "A7").Font.Bold = true;
xlWorkSheet.get_Range("A1", "A7").Font.Size = 13;

xlWorkSheet.get_Range("A2", "A7").Borders.Weight = 2;
xlWorkSheet.get_Range("A2", "A7").Font.Bold = true;
xlWorkSheet.get_Range("A2", "A7").Font.Size = 13;

xlWorkSheet.get_Range("A1", "B9").ColumnWidth = 25;



xlWorkBook.SaveAs(System.Windows.Forms.Application.StartupPath + "\\exceller\\6 Nolu sosyal ve kültürel faaliyetler\\" +
    txtFaaliyetAdi.Text + ".xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue
, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);


xlWorkBook.Close(true, misValue, misValue); 
xlApp.Quit();  

【讨论】:

  • EFE:感谢您的回答,但我的问题是它正在保存它,但其中包含宏。为什么会这样?我不希望宏可用
【解决方案3】:

这是 IIS 运行时的权限问题 我遇到了这个问题,我是这样解决的

我继续文件夹

C:\Windows\System32\config\SystemProfile

C:\Windows\SysWOW64\config\SystemProfile

是受保护的系统文件夹,它们通常有锁。

右键->卡安全->点击编辑->添加untente“Autenticadet用户”并分配权限。

此时一切都解决了,如果您仍然有问题尝试将所有权限授予“所有人”

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多