我有一个带有xml文件连接的excel 2007文件(OpenXML格式)。该连接生成一个Excel表格和数据透视表。使用OpenXML进行Excel“全部刷新”
我想用OpenXML SDK v2找到一种与Excel中的“全部刷新”按钮相同的方法。这样我就可以在提供新的xml文件后立即自动更新文件。
谢谢。
我有一个带有xml文件连接的excel 2007文件(OpenXML格式)。该连接生成一个Excel表格和数据透视表。使用OpenXML进行Excel“全部刷新”
我想用OpenXML SDK v2找到一种与Excel中的“全部刷新”按钮相同的方法。这样我就可以在提供新的xml文件后立即自动更新文件。
谢谢。
你不能用Open XML来做到这一点。 Open XML允许您使用存储在文件中的数据并更改数据和公式以及定义等。它实际上并没有做任何计算。
从技术上来说,Excel自动化是可行的,但绝对不推荐用于服务器环境,最好尽量避免在桌面上使用。
我认为你可以做到这一点的唯一方法是以下这种类型的方法..
ThisWorkbook.PivotCaches(yourIndex).Refresh();
或
ThisWorkbook.RefreshAll();
虽然我敢肯定RefreshAll也将工作。
这是一个来自COM excel类的方法。它在OpenXML类中不可用,因为它是用来操纵XML的。 最后,我不认为这是可能的。 – 2010-10-20 02:57:12
刷新全部应刷新数据透视表。我将根据上面的评论编辑我的答案。 – 2010-10-20 21:29:28
感谢您的时间,但我终于找到了我的问题的另一种解决方案:我设置了所有数据透视表中的“刷新打开文件时”选项。然后,我只需将数据导出到主表,以便Excel文件自动更改。 – 2010-10-21 00:56:26
那么对此有相当好的解决方法。 使用OpenXML,您可以在数据透视表中打开“在打开文件时刷新数据”选项(右键点击数据透视表 - >数据透视表选项 - >数据选项卡)。 当用户第一次打开电子表格时,会导致自动刷新数据透视表。 代码:
using (var document = SpreadsheetDocument.Open(newFilePath, true))
{
var uriPartDictionary = BuildUriPartDictionary(document);
PivotTableCacheDefinitionPart pivotTableCacheDefinitionPart1 = (PivotTableCacheDefinitionPart)uriPartDictionary["/xl/pivotCache/pivotCacheDefinition1.xml"];
PivotCacheDefinition pivotCacheDefinition1 = pivotTableCacheDefinitionPart1.PivotCacheDefinition;
pivotCacheDefinition1.RefreshOnLoad = true;
}
你需要确定的“路径”,以你的pivotCacheDefinition - 使用的OpenXML SDK 2.0生产力工具,寻找它。
BuildUriPartDictionary是OpenXML的SDK 2.0生产力工具
protected Dictionary<String, OpenXmlPart> BuildUriPartDictionary(SpreadsheetDocument document)
{
var uriPartDictionary = new Dictionary<String, OpenXmlPart>();
var queue = new Queue<OpenXmlPartContainer>();
queue.Enqueue(document);
while (queue.Count > 0)
{
foreach (var part in queue.Dequeue().Parts.Where(part => !uriPartDictionary.Keys.Contains(part.OpenXmlPart.Uri.ToString())))
{
uriPartDictionary.Add(part.OpenXmlPart.Uri.ToString(), part.OpenXmlPart);
queue.Enqueue(part.OpenXmlPart);
}
}
return uriPartDictionary;
}
另一种解决方案是你的电子表格macroenabled转换生成一个标准的方法,嵌入有一个VBA脚本,将刷新所有数据透视表。 当用户打开电子表格时,可能会在按钮单击或再次出现时发生。 在这里你可以找到VBA代码刷新数据透视表: http://www.ozgrid.com/VBA/pivot-table-refresh.htm
关于数据透视表,我只是选中每个数据透视表的选项“刷新打开文件的数据”。 – 2010-10-12 02:49:28