如何使用 C# 互操作将更改保存到原始 excel 文件?

How to save changes to original excel file using c# interop?

我使用以下代码打开文件:

object MissingValue = System.Reflection.Missing.Value;

xlWorkBook = xlApp.Workbooks.Open(filepath, MissingValue, false,
            MissingValue, MissingValue, MissingValue, MissingValue,MissingValue,
            MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue);

我尝试了以下所有方法来保存和关闭文件,但由于文件是只读文件,所有这些都导致了 COM 错误:

xlApp.DisplayAlerts = false;

        Excel.Workbooks wbs = xlApp.Workbooks;
        foreach (Excel.Workbook wb in wbs)
        {
            Console.WriteLine(wb.Name); 
            wb.Save();
            wb.Close();
        }

        //xlWorkBook.Save();
        //xlWorkBook.SaveAs(filepath, Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing,
        //false, false, Excel.XlSaveAsAccessMode.xlNoChange,
        //Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        //xlWorkBook.Close();
        //xlWorkBook.Close(true, filepath, filepath);
        //xlWorkBook.Close(false, MissingValue, MissingValue);
        xlApp.Quit();
        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);

我想知道可能出了什么问题,因为我提到了其他几个被问到的问题。请帮忙!。谢谢你的时间。

我找到了解决方案。我使用 Excel.range 来更新所需的单元格值。 当我先于别人释放Range对象时,保存关闭成功。谢谢大家:) 发布代码如下:

private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            MessageBox.Show("Unable to release the Object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }