【问题标题】:How to save changes to original excel file using c# interop?如何使用 c# interop 保存对原始 excel 文件的更改?
【发布时间】:2015-06-07 18:45:33
【问题描述】:

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

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);

当我引用了其他几个问题时,我想知道可能出了什么问题。请帮忙!。感谢您的宝贵时间。

【问题讨论】:

  • 文件是只读文件。如何保存只读文件?先把它设为非只读然后保存,或者你可以用其他名字保存。
  • @NikhilAgrawal 它不是只读文件,它可能由于某种原因被锁定。要么打开不对要么保存不对
  • 我想出了一个不同方法的解决方案。我创建了一个带有方法的接口,只允许一次在方法之间创建和使用一个 Marshall 对象。从该界面记录所有内容,并验证保存和关闭的每个工作簿/工作表。

标签: c# excel save interop edit


【解决方案1】:

我找到了解决方案。我使用 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();
        }
    }

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 2010-09-06
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多