我正在开发基于.NET Framework 4.0的基于Window的应用程序。该应用程序执行两项任务 -
正常情景
我已经共享了Excel文件,因此可以同时编辑和阅读。
现在,当我运行DDE Server时,它会向Excel发送一些数据。 Excel文件显示更新的数据,中断时间为2秒(默认值)。没关系。
编程方案
当从程序打开相同的excel文件时,它不会显示更新的数据。以下是使用的代码段 -
xlApp = new Application { AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityLow };
_xlApp.CalculateFull();
_xlBook = _xlApp.Workbooks.Open(ExcelFilePath, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);
//Add an event handler for the WorkbookBeforeClose Event of the Application object.
_eventBeforeBookClose = BeforeBookClose;
_xlApp.WorkbookBeforeClose += _eventBeforeBookClose;
//Add an event handler for the Change event of both worksheet objects.
_eventCellsChange = CellsChange;
//Add an event handler for the Calculate event of both worksheet objects.
_eventCellsCalculate = CellsCalculated;
_xlSheet1 = (Worksheet)_xlBook.Worksheets.Item[1];_xlSheet1.Change += _eventCellsChange;
((DocEvents_Event)_xlSheet1).Calculate += _eventCellsCalculate;
//Make Excel visible and give the user control.
_xlApp.Visible = true;
_xlApp.UserControl = true;
C#中是否有任何设置允许自动更新excel文件中的链接(从程序打开)?
答案 0 :(得分:1)
有一个更简单的解决方案,Workbooks Open方法提供了一个参数,正是出于这个原因:
_xlBook = _xlApp.Workbooks.Open(ExcelFilePath, UpdateLinks: 3);
有关UpdateLinks参数的确切规范,请参阅WorkBooks.Open documentation。值“3”将始终更新所有链接。
答案 1 :(得分:0)
为了自动更新excel中的链接,我添加了以下需要由timer tick事件调用的函数。
代码段 -
public static void UpdateLinkValues()
{
var oleLinks = (object)_xlBook.LinkSources(XlLink.xlOLELinks);
var oleLinkArray = (Array)oleLinks;
for (var i = 1; i <= oleLinkArray.Length; i++)
{
_xlBook.UpdateLink(oleLinkArray.GetValue(i),XlLinkType.xlLinkTypeOLELinks);
}
}
此函数检索嵌入的OLE链接。然后调用 UpdateLink()来更新值。