我有一个Excel文件(假设Book1.xlsx(,由C#应用程序在后台使用Microsoft.Office.Interop.Excel打开和更新,还有另一个Excel文件(MainBook.xlsx通过公式引用这本书(Book1(。
事实是,当 Book1 在后台更新时,MainBook 不会更新引用,直到我手动打开 Book1。
我应该怎么做,以便在更新 Book1 时,更改通过其拥有的公式反映在 MainBook 中。
是否可以使用 Workbook.UpdateLinks 来实现此目的?如果是这样,你会怎么做?试试这个 excel 中的链接不会自动更新 C#,它对我不起作用
这是我更新书1的代码
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();
这可能是因为您要在新的 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:MyFolderBook1.xlsx";
....
这种方式会导致 Book1.xlsx 可见 - 如果您当前的 Excel 实例(使用主书(可见。
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);
工作簿路径可能需要是 Book1.xlsx 文件的完整路径