Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用C保存Excel文件#_C#_Excel_Save - Fatal编程技术网

C# 无法使用C保存Excel文件#

C# 无法使用C保存Excel文件#,c#,excel,save,C#,Excel,Save,我正在尝试在Excel中修改和保存数据。使用下面的代码,我访问工作表,执行修改,然后保存文件。我无法保存该文件。这是我的密码: Application excel = new Application(); excel.Visible=true; Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx"); Worksh

我正在尝试在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正在被用户名修改。以只读方式打开”。如果单击“取消”按钮,我将收到上面带有“来自HRESULT的异常:0x800A03EC”的异常

我也尝试过:

wb.SaveAs(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx");
wb.Close(true,null,null);
从那以后,我收到了相同的错误,上面的文件显示了修改

有人能告诉我如何保存修改后的文件吗?

这是用于向后兼容的工作表(a.xls)而不是.xlsx

要允许在office 2007版之前的版本中打开图纸,无法 包含超过65k行。您可以检查数据库中的行数 使用ctrl+arrowdown组合键绘制图纸,直到触底。如果你想 获取一个大于将创建错误的行数的范围


检查您是否尚未运行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;

我真的不知道,只是想一想。。。您确定可以将相同的文件路径与
SaveAs
一起使用吗?通常这会创建一个新文档。是否有一个
Save()
函数可以替代您使用?不要使其可见。我看不到您正在释放创建的COM对象。。请记住,始终释放您创建/使用的每个Excel对象。若您遇到错误且未关闭工作簿,该工作簿可能会保持打开状态,所以只读新实例。。。更多:excel未关闭(使用
excel.Quit()
),因此内存中可以有许多excel进程…@musefan我首先尝试了它,但无法保存它。即使我尝试使它不可见,但仍然会出现错误“BookExcel1.xlsx”是只读的。若要保存副本,请单击“确定”,然后在“另存为”对话框中为工作簿指定一个新名称。“@Marco我尝试过,但仍然无法保存它。