1

我有这个代码:

Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
xla.Visible = false;
Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
Worksheet ws = (Worksheet)xla.ActiveSheet;
ws.Name = "Serial";
int i = 1;
foreach (DataRow comp in dsView.Tables[0].Rows)
{
    ws.Cells[i, 1] = "'" + comp[0].ToString();
    ws.Cells[i, 2] = "'" + comp[1].ToString();
    ws.Cells[i, 3] = "'" + comp[2].ToString();
    i++;
}
if (File.Exists(@"d:\DDD.xlsx"))
    File.Delete(@"d:\DDD.xlsx");
xla.Save(@"d:\DDD.xlsx");    ---->>>>  on this line i get the error

错误:

HRESULT 异常:0x800A03EC

我正在使用 Office 2012处理 C#

4

2 回答 2

1

您的问题是变量 xla 是您的 excel 应用程序,而不是工作簿。您要保存工作簿。

所以

xla.Save(@"d:\DDD.xlsx");    ---->>>>  on this line i get the error

应该

wb.SaveAs(@"d:\DDD.xlsx", System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,System.Reflection.Missing.Value,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value);
于 2012-12-13T16:12:58.363 回答
0

当我Excel.Application.Save()使用面向 .NET 4 的 Visual Studio 2010 和 Excel 2010 互操作 (Office 14) 运行时,它会显示一个对话框来选择保存文件的位置。在该对话框上单击“取消”会导致 COM 异常。但是单击保存有奇怪的结果:当我提供一个有效的文件路径和名称作为参数Excel.Application.Save(@"C:\blah.xlsx")时,我最终保存了两个文件。第一个名为 Sheet1.xlsx 并包含我所期望的,即使我没有在对话框中选择该名称。另一个名为 blah.xlsx(根据我的文件名参数),不会在 Excel 中正确打开。如果我Excel.Application.Save()在没有文件名作为参数的情况下调用,则会使用我在对话框中选择的名称和路径保存一个有效文件,但我也会得到一个“RESUME.XLW”文件。所以看起来Application.Save方法可能不是一个好的选择。相反,你可以做这样的事情,就像你期望的那样:

using System;
using Excel = Microsoft.Office.Interop.Excel;
namespace WindowsFormsApplication2
{
    static class Program
    {
        static void Main()
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook book = xlApp.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
            Excel.Worksheet sheet = book.ActiveSheet;
            sheet.Name = "Booya";
            Excel.Range range = sheet.Cells[1, 1];
            range.Value = "This is some text";
            book.SaveAs(@"C:\blah.xlsx");
        }
    }
}
于 2012-12-13T18:14:45.850 回答