![](/img/trans.png)
[英]How i can merge Microsoft Word table cells horizontally using OpenXML C#
[英]trying to merge table cells while generating a word document using openXML
我正在嘗試生成一個word文檔,其中創建的表格如圖像中所述,下面的代碼將合並第四列中的單元格以制作表格。
當我合並單元格時,不知何故添加了一個額外的空間,如圖所示。
var rowHeaderLabels = new List<string> { "Space", "Lighting Density" };
var columnHeaderLabels = new List<string> { "Occupants per 1000sf", "Sensible BTUH", "Latent BTUH" };
var assumedLoadsTable = RenderTableWithMergedHeader(rowHeaderLabels, "Equipment Density", "Occupant", columnHeaderLabels, assumedHeatingAndCoolingData);
這是RenderTableWithMergedHeader
方法的代碼
private static Table RenderTableWithMergedHeader(List<string> rowsHeaderLabel,string lastColumnName,string mergedColumnLabel, List<string> columnsHeaderLabel, List<List<string>> contentData)
{
var table = new Table();
var tableProperties = RenderTableProperties();
table.AppendChild(tableProperties);
TableRow tableHeaderRowA = new TableRow();
TableRow tableHeaderRowB = new TableRow();
foreach (var colName in rowsHeaderLabel)
{
tableHeaderRowA.Append(RenderTableHeaderCell(colName));
}
table.Append(tableHeaderRowA);
// problem is here with tableHeaderRowA
tableHeaderRowA.Append(RenderTableHeaderCell(lastColumnName, 1, MergedCellValues.Restart));
tableHeaderRowB.Append(RenderTableHeaderCell(null, 3, MergedCellValues.Continue));
tableHeaderRowA.Append(RenderTableHeaderCell(mergedColumnLabel,columnsHeaderLabel.Count));
foreach (var colName in columnsHeaderLabel)
{
tableHeaderRowB.Append(RenderTableHeaderCell(colName));
}
table.Append(tableHeaderRowB);
// Content binding code
return table;
}
這是RenderTableHeaderCell
方法的代碼
public static TableCell RenderTableHeaderCell(string columnName, int horizontalSpan = 1, MergedCellValues? verticalMerge = null)
{
TableCell tableCell = new TableCell();
TableCellVerticalAlignment tableCellVerticalAlignment = new TableCellVerticalAlignment() { Val = TableVerticalAlignmentValues.Center };
Paragraph paragraph = new Paragraph();
TableCellProperties tableCellProperties = RenderTablecellProperties();
tableCellProperties.Append(tableCellVerticalAlignment);
if (horizontalSpan != 1)
{
tableCellProperties.Append(new GridSpan() { Val = horizontalSpan });
}
if (verticalMerge != null)
{
VerticalMerge vm = new VerticalMerge() { Val = verticalMerge };
tableCellProperties.Append(vm);
}
var paragraphProperties = RenderParagraphJustification();
paragraph.Append(paragraphProperties);
Run newChild = RenderRun(columnName);
paragraph.AppendChild(newChild);
tableCell.Append(tableCellProperties);
tableCell.Append(paragraph);
return tableCell;
}
這正在生成如下圖所示的表格
我正在尋找如下圖所示的表格
我不確定上面的代碼在哪里做錯了,任何人都可以提出有關如何刪除第一張圖像中顯示的空間的任何想法。
提前謝謝了
我通過修改以下方法解決了我的問題
private static Table RenderTableWithMergedHeader(List<string> rowsHeaderLabel, string mergedColumnName, List<string> columnsHeaderLabel, List<List<string>> contentData)
{
var table = new Table();
var tableProperties = RenderTableProperties();
table.AppendChild(tableProperties);
TableRow tableHeaderRowA = new TableRow();
TableRow tableHeaderRowB = new TableRow();
foreach (var colName in rowsHeaderLabel)
{
tableHeaderRowA.Append(RenderTableHeaderCell(colName, 1, MergedCellValues.Restart));
tableHeaderRowB.Append(RenderTableHeaderCell(null, 1, MergedCellValues.Continue));
}
tableHeaderRowA.Append(RenderTableHeaderCell(mergedColumnName, columnsHeaderLabel.Count));
foreach (var colName in columnsHeaderLabel)
{
tableHeaderRowB.Append(RenderTableHeaderCell(colName));
}
table.Append(tableHeaderRowA);
table.Append(tableHeaderRowB);
foreach (var rowData in contentData)
{
var row = new TableRow();
foreach (var cellData in rowData)
{
row.Append(RenderContentCell(cellData));
}
table.Append(row);
}
return table;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.