我正在尝试使用OpenXML SDK 2.0将两个docx文档合并到一个docx文档中.应该合并文档而不会丢失其样式和自定义页眉和页脚.我希望我可以使用AltChunk和分节来实现这一点.但我无法让它发挥作用.
我可能想做什么?有人能给我一个如何实现这一目标的提示吗?
从Ruby on Rails应用程序生成Microsoft OOXML(docx)的最佳方法是什么?
我猜它不是用ruby.
目前我们使用rtf gem(http://rubygems.org/gems/rtf)生成可以从Microsoft Word完成的文档.该文档包括多种标题类型,表格和一些图像.
但是我们用来构建表格和图像的RTF扩展是MSWord特有的.使用OOXML,我们将获得与Word以及其他应用程序更好的兼容性.不幸的是,ODS不是一种选择,因为有意使用基于ooxml的iPad编辑器.
此外,应该注意这不会在Windows主机上提供,因此相关的win32/.net库不可用.
我正在尝试创建一个带有标题的表.我想要为表所采用的每个新页面重复此标题.如何在C#和OpenXml Wordprocessing中执行此操作?
DocumentFormat.OpenXml.Packaging.WordprocessingDocument internalDoc =
DocumentFormat.OpenXml.Packaging.WordprocessingDocument.Open(stream, true);
var tables = wordDoc.MainDocumentPart.Document.Descendants<SdtBlock>().Where
( r => r.SdtProperties.GetFirstChild<Tag>().Val.Value.StartsWith(DATA_TABLE_TAG));
Table table = tables.Descendants<Table>().Single();
//Here can I set some property to repeat the header of the table?
Run Code Online (Sandbox Code Playgroud) 我正在考虑直接使用Office XML格式替换(非常)大量的Office自动化代码.我刚刚开始,但我已经担心这太重要了.
我将处理Word,Excel和PowerPoint.到目前为止,我只看了Word和Excel.看起来Word文档应该相当容易操作,但Excel工作簿看起来像一场噩梦.例如...
在Word中,看起来您只需删除相应的"w:p"标记即可删除段落.但是,提供的用于删除Excel中的行的代码段大约需要150行代码(!).
Excel代码如此之大的原因是删除行意味着更新所有后续行的行索引,修复"共享字符串"表等.根据顶部的注释,代码片段甚至不完整因为它不会处理有表格的工作簿(我可以忍受).
我不清楚的是这是否是示例代码的唯一限制.例如,如果工作簿包含数据透视表,是否还会出现问题?或者引用同一张表中数据的图表?或者一些命名的范围?您是否还必须更新引用行索引已更改的行的任何单元格(等)的公式?
[更不用说"计算链"了,(谢天谢地)我认为你可以简单地删除,因为它只是一个可以重建的chache.
这就是我的问题,虽然它是毛茸茸的.你有多努力去做一些像正确删除行一样简单的事情?这是一项不可逾越的任务吗?
此外,如果还有其他类似的问题,无论是使用Excel还是使用Word或PowerPoint,我现在都喜欢听到它们,之后我浪费了太多时间去了一条死胡同.谢谢.
我想开发一个类库,可以处理PowerPoint模板,并填充格式化的数据.主要涉及表格,标签,幻灯片克隆.我想在.Net 4中使用Open Xml.
我想为此提供一些建议和参考.还想知道哪种方法是好的,是否使用OpenXml SDK 2.0或System.Packaging,因为我在一些地方读到使用Open Xml SDK消耗更多内存.
谢谢,Aneef
我已经在网络上阅读了很多有关如何使用OpenXML API获取单元格数据的内容。但是实际上并没有太多特别简单的地方。多数似乎与写SpreadsheetML有关,而不是阅读...但是即使那样也无济于事。我有一个包含表格的电子表格。我知道表的名称是什么,我可以找出它所在的表以及表中的列。但是我不知道如何获取包含表中数据的行集合。
我已经准备好加载文档并获得工作簿的句柄:
SpreadsheetDocument document = SpreadsheetDocument.Open("file.xlsx", false);
WorkbookPart workbook = document.WorkbookPart;
Run Code Online (Sandbox Code Playgroud)
我已经找到表/表了:
Table table = null;
foreach (Sheet sheet in workbook.Workbook.GetFirstChild<Sheets>())
{
WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheet.Id);
foreach (TableDefinitionPart tableDefinitionPart in worksheetPart.TableDefinitionParts)
{
if (tableDefinitionPart.Table.DisplayName == this._tableName)
{
table = tableDefinitionPart.Table;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过遍历table.TableColumns遍历表中的列。
当我使用OLEDB时,从Excel工作表中读取3200行只需2-3秒.现在我改为OpenXML格式,现在从Excel表读取3200行需要1分钟以上.
以下是我的代码:
public static DataTable ReadExcelFileDOM(string filename)
{
DataTable table;
using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true))
{
WorkbookPart workbookPart = myDoc.WorkbookPart;
Sheet worksheet = workbookPart.Workbook.Descendants<Sheet>().First();
WorksheetPart worksheetPart =
(WorksheetPart)(workbookPart.GetPartById(worksheet.Id));
SheetData sheetData =
worksheetPart.Worksheet.Elements<SheetData>().First();
List<List<string>> totalRows = new List<List<string>>();
int maxCol = 0;
foreach (Row r in sheetData.Elements<Row>())
{
// Add the empty row.
string value = null;
while (totalRows.Count < r.RowIndex - 1)
{
List<string> emptyRowValues = new List<string>();
for (int i = 0; i < maxCol; i++)
{
emptyRowValues.Add(""); …Run Code Online (Sandbox Code Playgroud) 根据OpenXml规范,CellReference是可选的.但是有没有另一种方法可以获得一个小区的位置?
例如,我可以通过以下方式获取行的单元格:
foreach (Row r in sheetData.Elements<Row>())
{
foreach (Cell c in r.Elements<Cell>())
{
Console.WriteLine(c.CellReference);
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果没有CellReference,我如何知道细胞的位置?
我做了一些研究,所有解决方案似乎都依赖于将单元格的CellReference与给定的字符串进行比较.
我正在尝试使用Open XML SDK 2.5将图像从C#插入文档中。该文档随后将被上传到Google云端硬盘,并转换为Google文档。
我当前正在使用MainDocumentPart.AddImagePart方法,该方法将图像插入/media文件层次结构的文件夹中。但是,驱动器仅希望读取图像(如果它位于/word/media文件夹中)。
在Microsoft Word中打开文档并再次保存,将图像重新定位到/word/media文件夹(并更新零件关系),从而使Drive能够读取图像,但是在将文件上传到Drive之前不会在Word中对其进行编辑。
有什么方法可以将图像放置在/word/media文件夹中,而无需关闭Open XML SDK中的文件,将其作为zip存档打开,重新定位图像并手动更新关系。
题
该类DocumentFormat.OpenXml.Drawing.BlipExtension有一个名为的属性Uri.在众多例子中,我看到了28A0092B-C50C-407e-A947-70E740481C1C使用的价值; 但从来没有发现这个值是什么/它是否重要,或者它是否是任意的,只是因为人们从现有的示例代码中复制粘贴而流行.
有谁知道这个GUID值的相关性是什么?
背景
我一直在修复遗留应用程序中的一个错误,并且一直在重构以删除一些代码的spaghettification.
在这样做的同时,我发现了一些硬编码的值; 插入到文档中的任何图像都会给出名称Koala.jpg.该系统与考拉无关; 意味着该人只是简单地复制粘贴了一些代码而没有考虑这些值的上下文/含义.另一个硬编码值是BlipExtension的Uri : 28A0092B-C50C-407e-A947-70E740481C1C. 我想确定这个GUID是否有任何特殊含义,或者它是否只是一个唯一值.谷歌搜索显示了许多示例代码中使用的这个值,但到目前为止,我还没有找到它的解释.以下示例结果.
查看BlipExtension文档并未提供有关如何找出此GUID /此引用的架构的详细信息. https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.blipextension.uri(v=office.14).aspx