Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# Excel互操作,清除自上次保存以来所做的更改_C#_Excel_Excel Interop_Vba - Fatal编程技术网

C# Excel互操作,清除自上次保存以来所做的更改

C# Excel互操作,清除自上次保存以来所做的更改,c#,excel,excel-interop,vba,C#,Excel,Excel Interop,Vba,我有一张我使用的Excel表格。我迭代给定次数(超过1000次),用值替换某些单元格,然后使用Excel计算两个公式。我使用Range.Value2和Range.Formula数组操作excel。 在每次迭代之后,我希望通过清除自上次保存以来所做的更改,将Excel恢复到其原始状态。然而,我很难找到这方面的任何信息,到目前为止,我已经尝试调用Application.Undo(),但是这不起作用 有人有什么建议吗 using excel = Microsoft.Office.Interop.Exc

我有一张我使用的Excel表格。我迭代给定次数(超过1000次),用值替换某些单元格,然后使用Excel计算两个公式。我使用
Range.Value2
Range.Formula
数组操作excel。 在每次迭代之后,我希望通过清除自上次保存以来所做的更改,将Excel恢复到其原始状态。然而,我很难找到这方面的任何信息,到目前为止,我已经尝试调用
Application.Undo()
,但是这不起作用

有人有什么建议吗

using excel = Microsoft.Office.Interop.Excel;
using System.IO
您可以在更改图纸之前尝试保存副本,然后在更改完成后从保存的副本加载

Workbook wb = excel.Workbooks.Open(path);
wb.SaveAs(CopyPath); 
File.Move(CopyPath, path);
.Undo()方法在代码自动化之后调用时完全无用。
它仅用于处理用户操作

如上所述,请遵循…
1.将当前状态保存到单独的工作簿文件。
2.将当前状态修改为新状态。
3.使用步骤1中的原始文件还原回文件


您可以为此过程向功能区添加一些按钮。

请使用以下代码:

Excel.Application xlApp ;
Excel.Workbook xlWorkBook ;
Excel.Worksheet xlWorkSheet ;
object misValue = System.Reflection.Missing.Value;


    xlApp = new Excel.ApplicationClass();
    xlWorkBook = xlApp.Workbooks.Add("Yourworkbook");

    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

    ....do your stuff

    xlWorkBook.Close(false, misValue, misValue);

    xlApp.Quit();

这是一个选项,但是,由于我正在进行迭代分配,因此每次迭代后执行该操作都会非常缓慢。不过,谢谢。@Tohmas这实际上取决于文件的大小和运行的时间。对我来说,听起来你应该只使用一个模板。从模板中读取内容,然后进行更改,关闭模板并再次加载以进行下一次更改。