使用c#写入现有的Excel文件

本文关键字:Excel 文件 使用 | 更新日期: 2023-09-27 18:15:17

我正在尝试打开(或创建一个新的xls) Excel文件并向其写入一些值。虽然,如果我只是创建一个新的xls文件,下面的程序可以正常工作,但是在

行中我遇到了一些问题。
**mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);**

错误如下:无法访问"LOG.xls"。文件可能已损坏,位于没有响应的服务器上,或者是只读的。它不是只读的,它没有损坏(因为有时文件是在运行时创建的)。那么问题是什么呢?

private static Microsoft.Office.Interop.Excel.Workbook mWorkBook;
    private static Microsoft.Office.Interop.Excel.Sheets mWorkSheets;
    private static Microsoft.Office.Interop.Excel.Worksheet mWSheet1;
    private static Microsoft.Office.Interop.Excel.Application oXL;
    private void btnSignIn_Click ( object sender, EventArgs e )
    {
        string path = "D:''LOG.xls";
        if(!File.Exists(path))
        {
            File.Create (path);
        }

        oXL = new Microsoft.Office.Interop.Excel.Application ();
        oXL.Visible = true;
        oXL.DisplayAlerts = false;
        //error on this line
        mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
        //Get all the sheets in the workbook
        mWorkSheets = mWorkBook.Worksheets;
        //Get the allready exists sheet
        mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item ("Sheet1");
        Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;
        int colCount = range.Columns.Count;
        int rowCount = range.Rows.Count;
        for ( int index = 1; index < 15; index++ )
        {
            mWSheet1.Cells [rowCount + index, 1] = rowCount + index;
            mWSheet1.Cells [rowCount + index, 2] = "New Item" + index;
        }
        mWorkBook.SaveAs (path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,
        Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
        Missing.Value, Missing.Value, Missing.Value,
        Missing.Value, Missing.Value);
        mWorkBook.Close (Missing.Value, Missing.Value, Missing.Value);
        mWSheet1 = null;
        mWorkBook = null;
        oXL.Quit ();
        GC.WaitForPendingFinalizers ();
        GC.Collect ();
        GC.WaitForPendingFinalizers ();
        GC.Collect ();
    }

使用c#写入现有的Excel文件

这里不适合使用File.Create。它返回一个(空白)FileStream,而不是一个Excel文件(用。xls定义路径不会创建一个Excel文件…)。

当你没有关闭并处理它时,当你试图打开它时,你会有一个异常,因为它已经在使用中(即使你释放它,你也会有一个异常,因为你在这个阶段还没有创建一个Excel文件)。

因此,如果工作簿存在,您可以使用oXL.Workbooks.Open打开它。如果工作簿不存在,你有创建它通过使用:oXL.Workbooks.Add(),然后你调用mWorkBook.SaveAs(...)方法来真正创建它。

oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = true;
oXL.DisplayAlerts = false;
string path = "D:''LOG.xls";
if (!File.Exists(path)) 
{
    mWorkBook = oXL.Workbooks.Add;
} 
else
{
    mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false,    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true,
        false, 0, true, false, false);
}

(希望VB=> c#是正确的)

和在你的savea方法,你将不得不设置正确的FileFormat 如果你想创建一个特定版本的Excel文件(再次设置。xls在路径是不够的…)

可选对象。保存文件时使用的文件格式。对于一个有效选项列表,请参阅FileFormat属性。对于现有的文件,默认格式为最后指定的文件格式;表示新的.

如果工作簿不存在,则创建工作簿的更好方法如下:

Excel.Workbook newWorkbook = excelApplication.Workbooks.Add();

file. create()返回一个FileStream实例,如果您想要访问该文件,则需要关闭该实例。

    if(!File.Exists(path))
    {
        File.Create (path);
    }

    if(!File.Exists(path))
    {
        File.Create (path).Close();
    }