我有一个Excel文件(比如Book1.xlsx),后台使用Microsoft.Office.Interop.Excel由C#应用程序打开和更新,还有另一个引用此文件的Excel文件(MainBook.xlsx)通过公式书(Book1) 事实是,当Book1在后台更新时,MainBook不会更新引用,直到我手动打开Book1。
我应该怎么做才能更新Book1时,更改会通过它的公式反映在MainBook中。
使用Workbook.UpdateLinks可以实现这一目标吗?如果是这样,你会怎么做?试试这个Links in excel are not updating automatically C#,它对我不起作用
这是我更新Book1的代码
Excel.Application excapp = new Microsoft.Office.Interop.Excel.Application();
excapp.Visible = false;
string workbookPath = @"Book1.xlsx";
var workbook = excapp.Workbooks.Open(workbookPath,
3, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
true, false, 0, true, false, false);
var sheet = (Excel.Worksheet)workbook.Sheets[1];
sheet.Range["A:A"].Clear();
string cellName;
int counter = 1;
foreach (var item in list)
{
cellName = "A" + counter.ToString();
var range = sheet.get_Range(cellName, cellName);
range.Value2 = item.ToString();
++counter;
}
workbook.Save();
workbook.Close();
答案 0 :(得分:0)
这可能是因为您使用以下行在Excel的新实例中打开:
Excel.Application excapp = new Microsoft.Office.Interop.Excel.Application();
1)如果您希望 立即 公式更新,则可以在同一实例中打开Book 1。您需要使用System.Runtime.InteropServices;为元帅班。
Excel.Application excapp = (Microsoft.Office.Interop.Excel.Application)
Marshal.GetActiveObject("Excel.Application");
string workbookPath = @"C:\MyFolder\Book1.xlsx";
....
这种方式会导致Book1.xlsx可见 - 如果您当前的Excel实例(使用Mainbook)可见。
2)另一种方法是使用现有的代码,然后在你的代码之后调用主书上的updateLink方法。
....
....
workbook.Save();
workbook.Close();
Excel.Application originalXLInstance = (Microsoft.Office.Interop.Excel.Application)
Marshal.GetActiveObject("Excel.Application");
Workbook mainBook = originalXLInstance.Workbooks.Item["MainBook.xlsx"];
mainBook.UpdateLink(workbookPath, XlLinkType.xlLinkTypeExcelLinks);
workbookPath可能需要是Book1.xlsx文件的完整路径