我有一个要打开Word文档(Avery网站的模板)的要求,该模板使用的是单词表。
处理数据的最易管理的方法是添加嵌套表(允许使用此词)。我知道OpenXML标准也允许它,但是当我使用OpenXML.DocumentFormat时,它似乎会将我的所有数据添加到单个单元格中。当我使用不带子表的纯文本时,它可以正常工作,并且可以遍历模板中的所有单元格,但是当我添加嵌套表时,它将所有数据放在模板的第一个单元格中。
我意识到我可以通过互操作来实现这一点,但是在托管该服务的盒子上安装了Word并不是一种选择,我宁愿远离书签或对基础文档进行任何类型的修改。
public void GenerateLabels(Stream stream, List<ItemValue> items, int offset)
{
using (MemoryStream docStream = new MemoryStream())
{
docStream.Write(LabelTemplates.Avery22806PrinttotheEdgeSquareLabels, 0, LabelTemplates.Avery22806PrinttotheEdgeSquareLabels.Length);
long cellCount = 0;
int parcount = 0;
using (WordprocessingDocument document = WordprocessingDocument.Open(docStream, true))
{
Body body = document.MainDocumentPart.Document.Body;
foreach (Table table in body.Descendants<Table>())
{
long rowCount = 0;
foreach (TableRow row in table.Descendants<TableRow>())
{
if (rowCount % 2 == 0)
{
int processCount = 0;
foreach (TableCell cell in row.Descendants<TableCell>())
{
if (items.Count() <= parcount)
{
break;
}
if (processCount % 2 == 0 && cellCount >= offset)
{
cell.Append(CreateBarcodeLabel(items[parcount], document));
cellCount++;
parcount++;
}
processCount++;
}
}
rowCount++;
}
}
stream.Write(docStream.ToArray(), 0, docStream.ToArray().Length);
document.SaveAs("C:\\labels\\labels1.docx");
}
}
}
private Paragraph CreateBarcodeLabel(ItemValue par, WordprocessingDocument document)
{
Table table = new Table();
List<TableRow> rows = new List<TableRow>();
rows.Add(new TableRow());
TableGrid headerRow = new TableGrid(new GridColumn(), new GridColumn());
TableCell imageCell = new TableCell();
imageCell.AppendChild(new Paragraph(new Run(new Text("Image Goes here!"))));
rows[0].Append(new TableCell(new Paragraph(new Run(new Text(par.Catalog.CatalogExternRef)))),imageCell);
rows.Add(new TableRow());
TableCell locatorCell = rows[1].AppendChild(new TableCell());
locatorCell.Append(new Paragraph(new Run(new Text(par.LocatorString))));
foreach (TableRow row in rows)
{
table.AppendChild(row);
}
return new Paragraph(new Run(table));
}
编辑: 为了明确起见,文档可以很好地打开,格式仅适用于软管。它会将所有数据推送到一个表单元格中。