2

我需要阅读Worksheet.CustomProperies。有没有办法读取这个属性?

我也尝试过使用获取工作簿和工作表的 XmlDocument

 XmlDocument xlDoc =  ws.WorksheetXml;

给我:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<dimension ref="A3:K24" />
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0"><selection activeCell="H14" sqref="H14" /></sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" />
<cols></cols><sheetData />
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />
<pageSetup orientation="portrait" horizontalDpi="4294967293" verticalDpi="4294967293" r:id="rId2" />
**<customProperties><customPr name="My_CustomProperty" r:id="rId3" /></customProperties>**
</worksheet>

我可以在那里看到一个 CustomProperty,但看不到 CustomProperty 值。当我转到 CustomProperty bin 文件(压缩 xlsx 并提取内容)时,值就在那里。

我在这里上传了文件

4

1 回答 1

1

我不熟悉这些自定义属性,但这是使用最新版本的 EPPlus 从示例文档中提取 customProperty1.bin 文件内容的一种方法:

using (ExcelPackage p = new ExcelPackage(new FileInfo(@"C:\Users_Template_12_22_Template.xlsx")))
{
    var parts = p.Package.GetParts();
    foreach (var part in parts)
    {
        if (part.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty")
        {
            using (var stream = part.GetStream())
            {
                byte[] data = new byte[stream.Length];
                stream.Read(data, 0, (int)stream.Length);
                stream.Close();

                string customPropertyInfo = System.Text.Encoding.Unicode.GetString(data);
            }
        }
    }
}

如果您知道 customProperty1.bin 文件的名称/位置,您可以使用 GetPart() 而不是 GetParts() 来访问它:

var u = new Uri("/xl/customProperty1.bin", UriKind.Relative);
var part = p.Package.GetPart(u);            

请注意,您需要添加对 WindowsBase.dll 的引用(在添加引用中的 .NET 选项卡下)才能使用与打包相关的方法。

于 2012-06-25T22:56:35.973 回答