原創|其它|編輯:郝浩|2012-10-15 15:08:31.000|閱讀 14447 次
概述:我們在使用Word或者Excel時,經常會遇到合并單元格的操作,這個部分是非常常見的操作。本文我們就一起來看看如何利用Aspose.Word控件實現單元格合并的操作。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
我們在使用Word或者Excel時,經常會遇到合并單元格的操作,這個部分是非常常見的操作。本文我們就一起來看看如何利用Aspose.Words控件實現單元格合并的操作。
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<double> widthList = new List<double>(); 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; }
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:伍華聰的專欄——博客園