• C#中使用Spire.docx操作Word文档


    使用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

     

  • 相关阅读:
    海量数据挖掘--DB优化篇
    BabyLinux制作过程详解
    C语言中的位域、字节序、比特序、大小端
    使用Busybox制作CRAMFS文件系统成功
    使用BusyBox制作linux根文件系统(CramFS+mdev)
    常用 U-boot命令详解
    基本C库函数
    simple_strtoul()
    在u-boot中添加命令
    U-Boot添加menu命令的方法及U-Boot命令执行过程
  • 原文地址:https://www.cnblogs.com/echo-web/p/9889135.html
Copyright © 2020-2023  润新知