标签: openxml

以下过程出错:解压.pptx -> 修改内容 -> 重新压缩为.pptx

我正在尝试解压缩 Microsoft Office 文件(.docx 和 .pptx),修改一些内容,然后重新压缩为新的 .docx 或 .pptx 文件。

我成功地使用 .docx 文件执行此操作:

1)$ unzip .../test.docx

2)修改document.xml文件中的部分内容

3)$ zip -r rezipped.docx *

使用上述过程,我可以在 Microsoft Word 中成功打开新文档 (rezipped.docx) 并查看更改的内容。

然后我对 .pptx 尝试了相同的过程,但没有成功。

1)$ unzip .../test.pptx

2)修改slide1.xml文件中的一些内容
例如简单的文本更改<a:t>Hello World</a:t><a:t>Hi World</a:t>

3)$ zip -r rezipped.pptx *

当我尝试在 Microsoft PowerPoint 2008 for Mac 版本 12.0 中打开 rezipped.pptx 时,收到以下错误消息:

访问 Macintosh rezipped.pptx 时出错

但是,我可以在 Keynote 中打开该文件,没有任何问题。

我尝试了相同的实验,但我只修改了docProps文件夹中的一个文件(即 app.xml 或 core.xml),并且我能够重新压缩它并在 Microsoft PowerPoint …

xml powerpoint openxml

5
推荐指数
2
解决办法
3144
查看次数

OpenXML 动态创建“表/数据透视表”

我正在创建一个在内存上生成 Excel 的示例程序。\n该程序已经生成了 Excel,但是我无法让该表工作...

\n\n

程序:

\n\n
public class Program\n{\n    static void Main(string[] args)\n    {\n        CreateCurrentAccount();\n    }\n\n    static void CreateCurrentAccount()\n    {\n        byte[] _buffer = ExcelGenerator.CurrentAccount.GetExcel();\n        File.WriteAllBytes("CurrentAccount.xlsx", _buffer);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Excel生成器类:

\n\n
public class ExcelGenerator\n{\n    static uint? _generalStyle = 0;\n    static uint? _dateStyle = 1;\n    static uint? _currencyStyle = 2;\n    static uint? _percentageStyle = 3;\n    static int maxStyleSheetName = 31;\n\n    public static class CurrentAccount\n    {\n        static uint? _headerStyle = 4;\n        static uint? _tableHeaderStyle = 5;\n        static uint? _totalHeaderStyle = 6;\n\n        public …
Run Code Online (Sandbox Code Playgroud)

.net c# excel openxml openxml-sdk

5
推荐指数
1
解决办法
4758
查看次数

OpenXML - 如何将电子表格文档保存到流中?

我从流中获取一个 .xlsx 文档(使用SpreadsheetDocument.Open(stream, false)然后将其存储到 Spreadsheetdocument 字段中,以便我稍后可以维护相同的对象。

我有一个保存方法,理想情况下我应该能够将 SpreadsheetDocument 保存到流中。有,document..WorkbookPart.Workbook.Save(stream);但这只是给了我一个空文件,当我只保存第一张表时(使用document.WorkbookPart.WorksheetParts.First().Worksheet.Save(stream);该文件很混乱并且不包含相关信息。如何将电子表格文档保存到流中?

c# excel openxml

5
推荐指数
1
解决办法
8442
查看次数

将自定义唯一 ID 分配给 Word 2013 OpenXML 元素

TLDR/问题

如何最好地将唯一 ID 分配给描述 Word 文档的 XML 中的(最好是所有)元素,以便我可以从 Word (2013) 加载项读取/写入这些唯一 ID?

此外,描述如何获得两个 Word 文档的良好差异的解决方案可能会有所帮助,但这不是主要问题。

背景

我正在使用 VSTO 创建 Word (2013) 的应用程序级加载项。我的部分任务涉及将原始 Word 文档W与修改后的文档进行比较W',以便我可以为另一项任务处理该差异。虽然 Word 显然具有差异/合并功能(可在 Word 2013 的“审阅”面板中找到),但到目前为止,我还没有找到一种以编程方式提取差异的方法。

因此,我计划获取文档的 XML(例如使用Range.WordOpenXML)并比较它们。有许多已发布的用于比较 XML 文档(即Diff(W.XML, W'.XML))的算法,其中比较的准确性在很大程度上取决于是否能够正确匹配两个文档中的 XML 元素。

建议的解决方案及其问题

因此,我希望能够为可以从加载项访问的 Word 文档的 XML 中的每个元素分配一个唯一的 ID。在这种情况下,解决方案类似于将自定义命名空间导入到名为的包中,并为 DOCX 包中的每个元素mynamespace添加属性。mynamespace:ID=***然后可以通过 访问该属性Range.WordOpenXML

但是,只需使用 mce:Ignorable、mce:ProcessContent 和 mce:PreserveAttributes,详见http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2012/09/21/markup-compatibility-and-extensibility.aspx不起作用。修改后的 Word 文档加载没有任何问题,但我似乎找不到任何属性,另外保存文档会删除所有添加的标记。

http://openxmldeveloper.org/discussions/formats/f/13/p/8078/163573.aspx看来,通过 Office Open XML 标准的标记兼容性和扩展性 (MCE) 部分使用自定义 xml 的过程已多年来变得复杂(专利问题等)。因此,我猜测我的问题的出现是因为 Word …

ms-word openxml office-addins word-2013 word-addins

5
推荐指数
1
解决办法
1058
查看次数

使用打开的 xml 将 altChunk 转换为段落

我已经使用 OpenXML 在 C# 中生成了 Word/docx 文档。使用 altChunk 添加/合并了另一份 docx 文档。当您打开该文档时,它看起来很棒。但进一步我需要使用 C# 代码处理该文档。我看到仍然存在 altChunk,它实际上具有指向合并文档的二进制序列化内容的指针。如果您在 Word - SaveAs 中执行此操作,并将文档保存到新文件并反映该文档(OpenXML 工具或 VS 扩展),那么您会发现 Word 引擎已将 altChunk 转换为段落。那太棒了。但我无法通过 C# 代码实现这一点。

如果我复制到新文件并保存,则什么也不会发生:

    public static void SaveAgain(string masterDocumentPath)
    {
        string newDocumentPath = @"F:\test.docx";
        using (Stream original = new FileStream(masterDocumentPath, FileMode.Open))
        {
            using (FileStream fs = File.Create(newDocumentPath))
            {
                original.CopyTo(fs);
            }
        }

        using (WordprocessingDocument myDocNew =
            WordprocessingDocument.Open(newDocumentPath, true))
        {
            myDocNew.MainDocumentPart.Document.Save();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在构建代码时使用了这篇文章(如何使用 altChunk 进行文档组装)。我缺少什么?

更新

我已经通过 Interop 成功地做到了这一点。这是片段:

    public static string SaveAsWithInterop(string masterDocumentPath)
    { …
Run Code Online (Sandbox Code Playgroud)

c# ms-word openxml openxml-sdk

5
推荐指数
0
解决办法
1977
查看次数

OpenXML - PowerPoint - 图片比例高度和宽度

我正在尝试使用 PowerPoint 演示文稿 PPTX 文件中图片的 OpenXML SDK 查找或计算比例高度和宽度值。

我得到的图像是

Picture = DocumentFormat.OpenXml.Presentation.Picture
Run Code Online (Sandbox Code Playgroud)

我查看了 ShapeProperties 和 NonVisualPictureProperties 但无法追踪这些值。

这就是我在 PowerPoint 内部查看时试图以编程方式获得的内容

在此输入图像描述

谁能告诉我这些值隐藏在哪里?

谢谢

c# powerpoint openxml

5
推荐指数
1
解决办法
2663
查看次数

“WordprocessingDocument.Open”后文件损坏

我对此有问题:

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true)) { }
Run Code Online (Sandbox Code Playgroud)

使用上面的方法并尝试在 Word 中打开文档,显示文件已损坏的错误消息。有趣的是,对于 LibreOffice 文件来说是可以的。我在使用此代码之前和之后比较了 WinMarge 文件中的 xml 文件(在 docx 中),两者是相同的。差异仅在于 docx 文件的大小 - 为什么?

c# openxml

5
推荐指数
1
解决办法
2975
查看次数

使用 openxml 创建 powerpoint 的示例

在哪里可以找到使用 OpenXML 在 ppt 文件中插入文本和图像的“Hello World”?我无法生成简单的模板。

c# powerpoint openxml

5
推荐指数
1
解决办法
1万
查看次数

.xlsx 和 .zip 之间的转换

我想操作Office Open XMLExcel 的格式,但即使只是.zip和之间的转换.xlsx也会产生错误:

  1. test.xlsx通过Excel创建一个非常简单的
  2. 右键单击test.xlsx=>Rename作为text.xlsx.zip
  3. 右键单击text.xlsx.zip=>Extract all到名为的文件夹text.xlsx
  4. 右键单击text.xlsx文件夹 => Send to=>Compressed (zipped) folder命名text_2.xlsx.zip
  5. 右键单击text_2.xlsx.zip=>Rename作为text_2.xlsx
  6. 用Excel打开text_2.xlsx,出现如下错误:

在此输入图像描述 在此输入图像描述

有谁知道那里出了什么问题吗?

openxml

5
推荐指数
1
解决办法
9022
查看次数

如何使用开放XML检索Excel的文化信息?

我的 Excel 文件中的数值用“.”存储。小数分隔符。我想知道,excel总是使用“.” 作为小数点分隔符?如果没有,那么如何检索 Excel 文件的文化信息以正确格式化十进制值?

谢谢。

.net excel culture cultureinfo openxml

5
推荐指数
1
解决办法
1066
查看次数