系统描述
使用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总是不受信任的?
我正在使用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并且没有前缀,但是,在保存操作之后出现前缀.我怎么能避免这种情况?
我正在使用OpenXML来操作文档.
我们是否需要安装办公室才能通过OpenXML打开文档?
我正在使用.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 …
来自富文本格式的维基百科页面(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控件?
显然,我不想为这样一个微不足道的问题设计我自己的文本格式控件,但我不想浪费开发时间来实现几乎弃用的技术.
谢谢!
我正在使用C#中的OpenXml包生成一个MS Word文档.很多次我看到这个erorr消息:

这个错误信息是无用的:所有它说问题是在页脚中.大多数时候它说错误在第1行,char 1.
我经常发现问题,但来回走动需要花费太多时间.
是否有任何工具/技术可以帮助调试此类错误?显示一个更好的错误,就像你试图添加一个运行的文本,或类似的东西?
使用 ClosedXML,我试图将数据添加到现有表格中的现有 Excel 工作表中。最简单的方法是将表格添加到 Excel 工作表中,下面是如何执行此操作的快速示例。我不明白的是,如果你已经有一个空的表,你怎么能添加到现有的表中?
// Add a DataTable as a worksheet
wb.Worksheets.Add(dataTable);
Run Code Online (Sandbox Code Playgroud) 以下是我拥有的代码,在下面的最终方法中,我完成了所有操作。请忽略方法的返回类型,我后来改了。
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) 我正在尝试创建一个 Office 打开的 xml 文档,其中包含项目符号列表。但该文档没有显示项目符号,而是显示了编号列表。
\n\n这就是我寻找的:
\n\n相反,我得到以下列表:
\n\n我已经深入挖掘了网络并用谷歌搜索了很多。我从http://officeopenxml.com/anatomyofOOXML.php和以下资源中阅读了文档:
\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) 我们编写了一个软件,可以从 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标记结束,结束语]位于下次运行。 …
openxml ×10
c# ×6
.net ×3
ms-word ×3
docx ×2
openxml-sdk ×2
xml ×2
asp.net ×1
bulletedlist ×1
c++ ×1
closedxml ×1
com ×1
debugging ×1
excel ×1
html ×1
namespaces ×1
rtf ×1
wpf ×1
wpf-controls ×1