使用docx一段時間之后,一些地方還是不方便,然后就嘗試尋找一種更加簡便的方法。
之前有嘗試過使用Npoi操作word表格,但是太煩人了,隨后放棄,然后發現免費版本的spire不錯,並且在莫種程度上比docx多一些實用的方法。
所以在此對自己摸索到的spire的一些方法,做一些簡單的記錄。
public void DOCXcreat3()
{
try
{
Document document = new Document();
Section section = document.AddSection();
Paragraph paragraph = section.AddParagraph();
paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
//獲取第一個Section對象
Section sec = document.Sections[0];
//設置紙張大小
//sec.PageSetup.PageSize = PageSize.Letter;
//分別設置四個方向的頁邊距
sec.PageSetup.Margins.Top = 70f;
sec.PageSetup.Margins.Left = 50f;
sec.PageSetup.Margins.Bottom = 60f;
sec.PageSetup.Margins.Right = 50f;
TextRange rangeTop = paragraph.AppendText("水平鑒定儀");
section.AddParagraph();
paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
rangeTop.CharacterFormat.Bold = true;
rangeTop.CharacterFormat.FontName = "Arial";
rangeTop.CharacterFormat.FontSize = 20;
//rangeTop.CharacterFormat.Position = 30;是整個字符塊的高度
//初始化一個Table類對象,並添加第一個table(24行7列)
Table table1 = section.AddTable(true);
table1.ResetCells(24, 7);
//table1.Width = 100%;
//這里是設置表格的整體樣式
//table1.ApplyStyle(DefaultTableStyle.LightGridAccent3);
//第一行
table1.Rows[0].Height = 40;
table1.ApplyHorizontalMerge(0, 0, 2);
table1.ApplyHorizontalMerge(0, 3, 6);
//注意TextRange和Paragraph的不同點。
Paragraph paragraph1 = table1.Rows[0].Cells[0].AddParagraph();
TextRange range1 = paragraph1.AppendText("設備ID:" + "18635445");
range1.CharacterFormat.FontName = "Arial";
range1.CharacterFormat.FontSize = 16;
Paragraph paragraph2 = table1.Rows[0].Cells[3].AddParagraph();
TextRange range2 = paragraph2.AppendText("儀器編號:" + "FH5919");
range2.CharacterFormat.FontName = "Arial";
range2.CharacterFormat.FontSize = 16;
//垂直居中
table1.Rows[0].Cells[0].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
table1.Rows[0].Cells[3].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
//水平居中
paragraph1.Format.HorizontalAlignment = HorizontalAlignment.Center;
paragraph2.Format.HorizontalAlignment = HorizontalAlignment.Center;
string[] subtitle = new string[7] { "標准角值", "盤左Ⅰ","盤左Ⅱ","盤右Ⅰ","盤右Ⅱ","平均","差值"};
//第二行
for (int n = 0; n < 7; n++) {
Paragraph paraRow2 = table1.Rows[1].Cells[n].AddParagraph();
paraRow2.AppendText(subtitle[n]);
paraRow2.Format.HorizontalAlignment = HorizontalAlignment.Center;
}
//此處是將單元格分割,獲取額外的單元格
//table1.Rows[1].Cells[6].SplitCell(2, 1);
//table1.Rows[1].Cells[6].Width = 10;
//在這里從數據記錄中循環讀取
for (int i = 0; i < 20; i++)
{
table1.Rows[i + 2].Height = 20;
for (int j = 0; j < 7; j++) {
Paragraph para = table1.Rows[i + 2].Cells[j].AddParagraph();
TextRange rowsContent = para.AppendText("{你你你");
rowsContent.CharacterFormat.FontName = "Arial";
//rowsContent.CharacterFormat.FontSize = 15;
para.Format.HorizontalAlignment = HorizontalAlignment.Center;
}
}
//可替換為[records + 1]
table1.Rows[22].Height = 36;
table1.ApplyHorizontalMerge(22, 0, 6);
Paragraph paraLast = table1.Rows[22].Cells[0].AddParagraph();
paraLast.AppendText("歸零后計算結果");
paraLast.Format.HorizontalAlignment = HorizontalAlignment.Center;
table1.Rows[23].Height = 36;
table1.ApplyHorizontalMerge(23, 0, 6);
Paragraph paraLast2 = table1.Rows[23].Cells[0].AddParagraph();
paraLast2.Format.HorizontalAlignment = HorizontalAlignment.Center;
paraLast2.AppendText("23.0");
for (int i = 1; i < 24; i++) {
for (int j = 0; j < 7; j++) {
table1.Rows[i].Cells[j].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
}
}
//保存並運行文件
string filePath = "D:\\測試文檔\\";
document.SaveToFile(filePath + "Sample2.docx", FileFormat.Docx);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
上方的代碼編譯之后如圖:

一些基本的方法可以去看代碼,都有相應的注釋。
然后先一些基本的需要注意的操作進行總結:
與Docx一樣的是,spire也是通過對document的操作實現word的具體設置。不過Spire中要比Docx多section這么一個中間層,在section的基礎上進行對cell或者paragraph的操作。
添加新的表格也要在section才可以新增table。
其余的具體的操作其實也大同小異,可以類比。不過需要區分Textrange和Paragraph各自不同的屬性。
還需要注意spire的合並單元格的方法格式(row, start,end)。而且合並之后的單元格計數,就是按start為准,這一點和Docx中合並之后單元格從0開始計數就不一樣了。
//橫向合並: table1.Rows[0].Height = 40; table1.ApplyHorizontalMerge(0, 0, 2); table1.ApplyHorizontalMerge(0, 3, 6);
//縱向合並:合並第一列第3、4個單元格
table1.ApplyVerticalMerge(0, 2, 3);
然后其他的方法與功能,暫時我就沒有用到了,如果以后深入使用的話,會持續的更新,如果有錯誤,也請提出來,我會及時改正的。
這里是一片大佬寫的很全面的文章:
https://www.cnblogs.com/Yesi/p/4280949.html
