0

以下代码取自本教程,用于使用 C# 创建和保存 Excel 文件:

using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsFormsAppExcelTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonCreateExcelFile_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
            xlWorkBook.SaveAs("csharp-Excel.xls",
                Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue,
                Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit(); 
            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
            MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls"); 
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 
    } // class
} // namespace

它似乎运行良好——我看到了 MessageBox 消息,我可以单步执行它而没有任何问题的迹象。但是该文件没有按原样保存到硬盘驱动器中。为什么不?

4

1 回答 1

0

保存到特定的非根位置(子文件夹)有效,例如:

String savefullpath = @"C:\misc\csharpExcelTest.xls";
    xlWorkBook.SaveAs(savefullpath,
        Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue,
        Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);

该文件确实保存到该位置。

显然唯一的问题是试图保存到 C/root。甚至尝试显式保存到根目录,如下所示:

String savefullpath = @"C:\csharpExcelTest.xls";

...(而不是简单地提供一个裸文件名)可耻地失败了,告诉我:

System.Runtime.InteropServices.COMException was unhandled
  HelpLink=C:\Program Files (x86)\Microsoft Office\Office12\1033\XLMAIN11.CHM
  HResult=-2146827284
  Message=Microsoft Office Excel cannot access the file 'C:'. There are several possible reasons:

• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.
    . . .

所以:保存到 root 以外的其他地方以避免这个问题。

更新

此外,当我没有提供文件夹/完整路径并假设它将它保存到 C: 时,它似乎被保存到我的“文档库”中。我今天早上碰巧查看了那个文件夹,并在那里看到了文件。

于 2015-10-27T18:02:39.617 回答