为什么假定保存的文件没有真正保存?

时间:2015-10-27 17:35:21

标签: c# excel office-interop excel-interop ole-automation

以下代码取自this tutorial以使用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消息,我可以单步执行它没有任何问题的迹象。但是文件不会像应该的那样保存到硬盘驱动器中。为什么不呢?

1 个答案:

答案 0 :(得分: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。甚至尝试明确保存到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:。我今天早上碰巧看了那个文件夹,看到那里的文件。