(); 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; }
以上代码的步骤就是
1)创建Aspose.Words.Document 和 Aspose.Words.DocumentBuilder对象,然后⽣成数据的⼆维表格内容。2)遍历模板表格,或者每⼀列的宽度,以备后⽤。
3)移动到表格的书签位置,然后开始录⼊数据,Word表格的每个Cell都要求制定样式和宽度,这样才能和表格头部吻合。4)保存⽂件内容到新的⽂件⾥⾯即可。输出的效果如下所⽰。
2、单元格合并的操作
常见的Word⽂件或者Excel⽂件中,都经常看到合并单元格的内容,因此这个部分也是⾮常常见的操作,必须掌握。我们先看⼀个例⼦代码及效果。
try {
Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);
Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc); 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; }
他的效果如下
关于合并单元格的介绍,你还可以参考下这篇官⽅介绍:
如果上⾯的例⼦还不够明⽩,OK,我在介绍⼀个实际的例⼦,来说明合并单元格的操作模式。实际⽂档⽣成如下所⽰:
⽂档的模板如下所⽰:
其实这个⾥⾯的“测试”内容是使⽤代码写⼊的,其实就是⼀⾏业务数据,⽤两⾏来展⽰,其中有些合并的单元格,这是⼀个实际项⽬的表格形式。我们注意到,每⾏有13个单元格,其中第⼀、第⼆、第⼗三列是合并列。和并列有⼀个特点,就是它的两个索引都有效,不过只是能使⽤第⼀个索引来对它进⾏操作复制,利⽤第⼆个没有⽤处的。
如第⼀个列是和并列,它应该有0、13这样的索引,第⼆列也是和并列,它也有1、14的索引,其他的类推。了解这样的逻辑关系后,我们看实际操作的代码如下所⽰。
try {
Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);
Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);
List widthList = new List();for (int i = 0; i < 13; i++) {
builder.MoveToCell(0, 2, i, 0); //移动单元格
double width = builder.CellFormat.Width;//获取单元格宽度 widthList.Add(width); }
builder.MoveToBookmark(\"table\"); //开始添加值
Table table = builder.StartTable();
builder.RowFormat.HeadingFormat = true;
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
for (int j = 0; j < 26; j++) {
builder.InsertCell();// 添加⼀个单元格
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black; int cellIndex = (j > 12) ? (j-13) : j; //位于第⼏个单元格 builder.CellFormat.Width = widthList[cellIndex];
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐 builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//⽔平居中对齐 builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None; if (cellIndex == 0 || cellIndex == 1 || cellIndex == 12) {
if (j > 12) {
builder.CellFormat.VerticalMerge = CellMerge.Previous; } else {
builder.CellFormat.VerticalMerge = CellMerge.First; } }
builder.Write(\"测试\" + j.ToString()); if (cellIndex == 12 ) {
builder.EndRow(); } }
builder.EndTable();
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; }