簡體   English   中英

無法使用C#保存Excel文件

[英]Unable to Save Excel File Using C#

我正在嘗試修改和保存Excel中的數據。 使用下面的代碼,我正在訪問工作表,執行修改,然后保存文件。 我無法保存文件。 這是我的代碼:

Application excel = new Application();
        excel.Visible=true;
        Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx");
        Worksheet ws = (Worksheet)wb.Worksheets[1];
        ws.Cells[1, 1] = "sagar";
        ws.Cells[2, 1] = "sagar";
        ws.Cells[3, 1] = "sagar";
        wb.Save();
        wb.close();

我收到此錯誤:“名為'BookExcel1.xlsx'的文件已存在於此位置。您要替換它嗎?”

所以我將代碼更改為:

Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx",0, false, 5, "", "",
            false, XlPlatform.xlWindows, "", true, false,
            0, true, false, false););

然后錯誤是:“BookExcel1.xlsx被user_name.open修改為只讀”。 如果我單擊“取消”按鈕,我會收到上面的例外“HRESULT異常:0x800A03EC”

我也嘗試過:

wb.SaveAs(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx");
wb.Close(true,null,null);

從那里我收到相同的錯誤,上面的文件顯示修改。

任何人都可以告訴我如何保存文件並進行修改?

檢查您是否已經運行Excel.exe進程。 此外,您應該打開工作簿,以便它是可編輯的。

此代碼有效:

string txtLocation = Path.GetFullPath(InputFile);

object _missingValue = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application excel = new   Microsoft.Office.Interop.Excel.Application();
Excel.Workbook theWorkbook = excel.Workbooks.Open(txtLocation,
                                                        _missingValue,
                                                        false,
                                                        _missingValue,
                                                        _missingValue,
                                                        _missingValue,
                                                        true,
                                                        _missingValue,
                                                        _missingValue,
                                                        true,
                                                        _missingValue,
                                                        _missingValue,
                                                        _missingValue);

//refresh and calculate to modify
theWorkbook.RefreshAll();
excel.Calculate();
theWorkbook.Save();
theWorkbook.Close(true);
excel.Quit();

發生這種情況是因為我嘗試打開的文件已在excel應用程序中打開。 在我的代碼中,我沒有關閉某些條件的excel應用程序。 這就是它以只讀權限打開它的原因。 所以我在更新后無法保存該文件。 要使用讀寫打開它,您必須先關閉該文件。 之后,您可以打開它並輕松地對文件執行讀寫操作。

您可以使用以下代碼關閉並查看已打開的所有Excel應用程序:

Application excel = (Application)Marshal.GetActiveObject("Excel.Application");
Workbooks wbs = excel.Workbooks;
foreach (Workbook wb in wbs)
{
    Console.WriteLine(wb.Name); // print the name of excel files that are open
    wb.Save();
    wb.Close();
}
excel.Quit();

在頂部,添加以下代碼並引用Microsoft.Office.Interop.Excel

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

問題適用於向后兼容的工作表(.xls)而不是.xlsx。

要允許在Office 2007版本中打開工作表,它不能包含超過65k行。 您可以使用ctrl + arrowdown檢查工作表中的行數,直到您觸及底部。 如果您嘗試獲得大於該行數的范圍,則會產生錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM