使用互操作在后台更新 Excel 文件并更新链接的书籍



我有一个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 文件的完整路径

最新更新