一種是在Word的自定義快速訪問工具欄上添加其他命令,如下步驟所示
前者插入的書簽是沒有文字或者特別的標記,但是確實存在,后者會插入一個灰色塊作為占位符,如下所示,我這這個二維表格的例子里面使用后者進行測試(兩者同等效果的)
這樣設計好Word模板后,下一步就是如何利用代碼生成二維表格了。首先這里提示一下,就是我故意設置了每個表格單元格的寬度不同,所以也就要求生成的行要和頭部對應,所以表格生成每行之前,肯定要獲得對應列的樣式屬性的,否則就會對應不上了。下面看代碼。
DataTable nameList = DataTableHelper.CreateTable("編號,姓名,時間");
DataRow row = null;
for (int i = 0; i < 50; i++)
{
row = nameList.NewRow();
row["編號"] = i.ToString().PadLeft(4, '0');
row["姓名"] = "伍華聰 " + i.ToString();
row["時間"] = DateTime.Now.ToString();
nameList.Rows.Add(row);
}
List<double> widthList = new List<double>();
for (int i = 0; i < nameList.Columns.Count; i++)
{
builder.MoveToCell(0, 0, i, 0); //移動單元格
double width = builder.CellFormat.Width;//獲取單元格寬度
widthList.Add(width);
}
builder.MoveToBookmark("table"); //開始添加值
for (var i = 0; i < nameList.Rows.Count; i++)
{
for (var j = 0; j < nameList.Columns.Count; j++)
{
builder.InsertCell();// 添加一個單元格
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.Width = widthList[j];
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中對齊
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中對齊
builder.Write(nameList.Rows[i][j].ToString());
}
builder.EndRow();
}
doc.Range.Bookmarks["table"].Text = ""; // 清掉標示
doc.Save(saveDocFile);
if (MessageUtil.ShowYesNoAndTips("保存成功,是否打開文件?") == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start(saveDocFile);
}
}
catch (Exception ex)
{
LogHelper.Error(ex);
MessageUtil.ShowError(ex.Message);
return;
}
2、單元格合并的操作
常見的Word文件或者Excel文件中,都經常看到合并單元格的內容,因此這個部分也是非常常見的操作,必須掌握。
我們先看一個例子代碼及效果。
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.Write("Text in merged cells.");
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.Write("Text in one cell");
builder.EndRow();
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
// This cell is vertically merged to the cell above and should be empty.
builder.CellFormat.VerticalMerge = CellMerge.Previous;
builder.InsertCell();
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.Write("Text in another cell");
builder.EndRow();
doc.Save(saveDocFile);
if (MessageUtil.ShowYesNoAndTips("保存成功,是否打開文件?") == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start(saveDocFile);
}
}
catch (Exception ex)
{
LogHelper.Error(ex);
MessageUtil.ShowError(ex.Message);
return;
}
他的效果如下
關于合并單元格的介紹,你還可以參考下這篇官方介紹:http://www.aspose.com/docs/display/wordsnet/Working+with+Merged+Cells
如果上面的例子還不夠明白,OK,我在介紹一個實際的例子,來說明合并單元格的操作模式。
實際文檔生成如下所示:
文檔的模板如下所示:
其實這個里面的“測試”內容是使用代碼寫入的,其實就是一行業務數據,用兩行來展示,其中有些合并的單元格,這是一個實際項目的表格形式。我們注意到,每行有13個單元格,其中第一、第二、第十三列是合并列。和并列有一個特點,就是它的兩個索引都有效,不過只是能使用第一個索引來對它進行操作復制,利用第二個沒有用處的。
如第一個列是和并列,它應該有0、13這樣的索引,第二列也是和并列,它也有1、14的索引,其他的類推。
了解這樣的邏輯關系后,我們看實際操作的代碼如下所示。
撰寫人:伍華聰
新聞熱點
疑難解答