标签: openxml

在OOXML中使用大二进制段的问题

系统描述

使用OOXML生成文档的绘图组件.

绘图组件由几个部分组成.除了OOXML文档的接口之外,所有部分都用C++编写为exe + dll.后一个组件是在C#/ .NET中创建的COM组件.主要原因是.NET框架包含System.IO.Packaging.这是一个非常方便的内置工具,用于处理OOXML文档.

我们使用模板OOXML文档创建文档,其中某些零碎的部分由其实际内容替换.

其中一个位是OLE服务器组件.基本上这是OOXML文件中的二进制段.为了编写这个二进制段,Packaging组件显然使用了独立存储.

问题

写一个> 8MB的段导致抛出异常"无法确定域的身份".

在C++端,此异常包含错误ISS_E_ISOSTORE(0x80131450).

我们已经对此进行了分析,据我们所知,这是一个安全功能,可防止半不受信任的第三方组件通过编写大量文件来完全破坏您的HD.

然后我们在.NET/COM组件中尝试了很多东西(创建自定义AppDomain,设置属性以获得最大允许性,创建我们自己的Streams并将它们传递给Packaging组件)但每次都会导致抛出相同的异常.

我们可以做些什么来完成这项工作?

可能是当.NET组件被实例化为COM组件时,其AppDomain总是不受信任的?

.net c# c++ com openxml

7
推荐指数
1
解决办法
647
查看次数

XLSX-如何摆脱默认的名称空间前缀x:?

我正在使用OOXML SDK生成XLSX电子表格,我需要摆脱x:名称空间前缀.我怎样才能做到这一点?

using (SpreadsheetDocument doc = SpreadsheetDocument.Open("template.xlsx", true))
            {
                //Save the shared string table part
                if (doc.WorkbookPart.GetPartsOfType().Count() > 0)
                {
                    SharedStringTablePart shareStringPart = 
doc.WorkbookPart.GetPartsOfType().First(); shareStringPart.SharedStringTable.Save(); } //Save the workbook doc.WorkbookPart.Workbook.Save(); }

这里,原始XLSX文件来自Excel 2007并且没有前缀,但是,在保存操作之后出现前缀.我怎么能避免这种情况?

namespaces openxml spreadsheetml openxml-sdk

7
推荐指数
1
解决办法
2362
查看次数

我们是否需要Office安装才能使用OpenXML?

我正在使用OpenXML来操作文档.

我们是否需要安装办公室才能通过OpenXML打开文档?

c# asp.net openxml

7
推荐指数
1
解决办法
3536
查看次数

如何使用OpenXML Sdk替换Paragraph的文本

我正在使用.Net OpenXml SDK 2.0解析一些Openxml word文档.作为处理的一部分,我需要用其他句子替换某些句子.在迭代段落时,我知道当我找到需要替换的东西时,但我很难过如何替换它.

例如,假设我需要将"a contract exclusively for construction work that is not building work."带有html代码段的句子替换为下面的Sharepoint可重用内容.

<span class="ms-rtestate-read ms-reusableTextView" contentEditable="false" id="__publishingReusableFragment" fragmentid="/Sites/Sandbox/ReusableContent/132_.000" >a contract exclusively for construction work that is not building work.</span>

PS:我使用xslt得到了docx到Html的转换,所以在这个阶段这不是问题

Paragraph节点的InnerText属性为我提供了正确的文本,但内部文本属性本身不可设置.所以 Regex.Match(currentParagraph.InnerText, currentString).Success 返回true并告诉我当前段落包含我想要的文本.

正如我所说,InnerText本身不可设置,所以我尝试使用outerxml创建一个新段落如下.

string modifiedOuterxml = Regex.Replace(currentParagraph.OuterXml, currentString, reusableContentString);
OpenXmlElement parent = currentParagraph.Parent;
Paragraph modifiedParagraph = new Paragraph(modifiedOuterxml);
parent.ReplaceChild<Paragraph>(modifiedParagraph, currentParagraph);
Run Code Online (Sandbox Code Playgroud)

尽管我并不太关心这个级别的格式化并且它似乎没有任何格式,但是outerXML似乎有额外的元素可以打败正则表达式.

..."16" /><w:lang w:val="en-AU" /></w:rPr><w:t>a</w:t></w:r><w:proofErr w:type="gramEnd" /> <w:r w:rsidRPr="00C73B58"><w:rPr><w:sz w:val="16" /><w:szCs w:val="16" /><w:lang w:val="en-AU" /></w:rPr><w:t xml:space="preserve"> contract exclusively for construction work that …

.net c# openxml openxml-sdk

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

Rich文本格式是否已弃用?

来自富文本格式的维基百科页面(http://en.wikipedia.org/wiki/Rich_Text_Format):

截至2008年3月,当前版本为1.9.1.根据Microsoft的Office 2010资源工具包文档,Microsoft正在停止对RTF规范的增强.此外,Word 2010及更高版本中的某些新功能无法正确保存为RTF格式.[11]

请参考此处:http: //technet.microsoft.com/en-us/library/cc179199.aspx#BKMK_Changed

我正在努力包含一些静态的,格式化的文本,这些文本将从本地数据库中提取,并将由仅在内部使用的应用程序显示.

我应该通过.NET的内置RichTextBox使用RTF格式吗?微软的新OpenXML格式会在不久的将来被弃用吗?

是否最好完全跳过Rich Text并使用HTML格式?如果是这样,你会推荐什么.NET控件?

显然,我不想为这样一个微不足道的问题设计我自己的文本格式控件,但我不想浪费开发时间来实现几乎弃用的技术.

谢谢!

html wpf rtf openxml wpf-controls

7
推荐指数
1
解决办法
1773
查看次数

在C#生成中调试损坏的OpenXML Word文档的最佳实践

我正在使用C#中的OpenXml包生成一个MS Word文档.很多次我看到这个erorr消息:

无法打开文件.docx,因为内容存在问题

这个错误信息是无用的:所有它说问题是在页脚中.大多数时候它说错误在第1行,char 1.

我经常发现问题,但来回走动需要花费太多时间.

是否有任何工具/技术可以帮助调试此类错误?显示一个更好的错误,就像你试图添加一个运行的文本,或类似的东西?

c# debugging ms-word openxml

7
推荐指数
1
解决办法
1444
查看次数

ClosedXML 向现有表添加数据

使用 ClosedXML,我试图将数据添加到现有表格中的现有 Excel 工作表中。最简单的方法是将表格添加到 Excel 工作表中,下面是如何执行此操作的快速示例。我不明白的是,如果你已经有一个空的表,你怎么能添加到现有的表中?

// Add a DataTable as a worksheet
            wb.Worksheets.Add(dataTable);
Run Code Online (Sandbox Code Playgroud)

c# openxml closedxml

7
推荐指数
2
解决办法
6567
查看次数

使用openxml将背景颜色应用于excel中的特定单元格

以下是我拥有的代码,在下面的最终方法中,我完成了所有操作。请忽略方法的返回类型,我后来改了。

public static byte[] CreateExcelDocument<T>(List<T> list, string filename)
        {
            DataSet ds = new DataSet();
            ds.Tables.Add(ListToDataTable(list));
            byte[] byteArray = CreateExcelDocumentAsStream(ds, filename);
            return byteArray;
        }
public static bool CreateExcelDocumentAsStream(DataSet ds, string filename, System.Web.HttpResponse Response)
        {
            try
            {
                System.IO.MemoryStream stream = new System.IO.MemoryStream();
                using (SpreadsheetDocument document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true))
                {
                    WriteExcelFile(ds, document);
                }
                stream.Flush();
                stream.Position = 0;

                Response.ClearContent();
                Response.Clear();
                Response.Buffer = true;
                Response.Charset = "";

                //  NOTE: If you get an "HttpCacheability does not exist" error on the following line, make sure …
Run Code Online (Sandbox Code Playgroud)

.net c# excel openxml

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

Office Open XML 项目符号列表

我正在尝试创建一个 Office 打开的 xml 文档,其中包含项目符号列表。但该文档没有显示项目符号,而是显示了编号列表。

\n\n

这就是我寻找的:

\n\n
    \n
  • 第 1 款
  • \n
  • 第 2 段
  • \n
\n\n

相反,我得到以下列表:

\n\n
    \n
  1. 第 1 款
  2. \n
  3. 第 2 段
  4. \n
\n\n

我已经深入挖掘了网络并用谷歌搜索了很多。我从http://officeopenxml.com/anatomyofOOXML.php和以下资源中阅读了文档:

\n\n\n\n

以及 StackOverflow 上。

\n\n

我还尝试创建一个包含项目符号列表的新 Word 文档,然后从文件本身复制代码,但没有成功。\n这是我的 numbering.xml 文件的内容:

\n\n
<w:numbering [all namespaces follow]>\n<w:abstractNum w:abstractNumId="0">\n    <w:multiLevelType w:val="multilevel"/>\n    <w:lvl w:ilvl="0">\n        <w:start w:val="1"/>\n        <w:numFmt w:val="bullet"/>\n        <w:lvlText w:val="\xef\x82\xb7"/>\n        <w:lvlJc w:val="left"/>\n        <w:pPr>\n            <w:tabs>\n                <w:tab w:val="num" w:pos="720"/>\n            </w:tabs>\n            <w:ind w:left="720" w:hanging="720"/>\n        </w:pPr>\n        <w:rPr>\n            <w:rFonts w:ascii="Symbol" …
Run Code Online (Sandbox Code Playgroud)

xml ms-word docx bulletedlist openxml

7
推荐指数
1
解决办法
4868
查看次数

DOCX w:t(文本)元素跨越多个 w:r(运行)元素?

我们编写了一个软件,可以从 Word 文档的内部 XML 文件中处理 XML,并用替换值替换某些代码。有时我们发现此类代码在多次运行之间被破坏。以下是我们有时会遇到的此类情况的示例:

<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">After all, if you trust [CAN:Forename.ATTORNEY#01] enough to give</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">] power of attorney, you should trust </w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t>] enough to make the right decisions at the time.</w:t>
</w:r>
Run Code Online (Sandbox Code Playgroud)

该段落一开始很好,完整的代码[CAN:Forename.ATTORNEY#01]很好地嵌入在单个w:t节点中,这很完美,但在其下方,有一个w:t包含代码开头的节点,[CAN:ObjPronoun.ATTORNEY#01但随后w:t标记结束,结束语]位于下次运行。 …

xml ms-word docx openxml

7
推荐指数
1
解决办法
6665
查看次数