zoukankan      html  css  js  c++  java
  • Word模板中的表格处理

    在软件系统中,我们经常要输出一些word ,excel,ppt文档,为了输出结果漂亮美观、输出操作方便快捷,通常要制作一些模板文件,通过对模板文件中的关键信息进行修改,就不用管排版、格式等处理了。

    在word中,使用非常多的就是书签,替换书签的内容,从而达到快速高效的产出目的。而有人觉得word用书签处理不了表格,于是,我就不信,来测试了一下。

    主要目的

    如下表格,每一次产出都要得到如下格式的表格,每次红线内的内容不一样,并且需要计算出合计项。

    在模板文件中设计的表格如下,表头、首列及合计单元格的样式不同与其他单元格,表格已插入了一个书签,便于查找操作;而且表格数据行有5行(表一共有7行),而实际的数据可能是5行,也可能小于5行(不能高于5行,因为word中只给定了有限的空间位置)

    实现步骤

    1.在word中最大限度的设计好表格的样式、位置、大小及单元格的字体、风格样式等,保存为模板文件;

    2.从数据库中查询数据为datatable,并将列名增加到首行,成为第一列(word中表格的表头);

    3.根据书签读取表格;

    4.将datatable写入表格;

    5.删除空白行;

    6.查询是否有合计行,如果有计算合计。

    相关代码

    这里使用的第三方组件,Aspose.Words。相关操作代码如下:

    打开word

    Document doc = new Document(txtDocPath.Text.Trim());
    

    根据书签读取表格

    Bookmark bm = doc.Range.Bookmarks["书签名"];
    table = (Table)bm.BookmarkStart.GetAncestor(NodeType.Table);
    

    读取所有表格

    //读取所有表格
    NodeCollection tables = doc.GetChildNodes(NodeType.Table, true);
    for (int i = 0; i < tables.Count; i++)
    {
        Table table = (Table)doc.GetChild(NodeType.Table, i, true);
    }
    

    遍历书签

    //读取所有书签
    BookmarkCollection bmCollection = doc.Range.Bookmarks;
    for (int i = 0; i < bmCollection.Count; i++)
    {
        Console.WriteLine(bmCollection[i].Name+@":"+bmCollection[i].Text);
    }
    

    遍历表格

    //遍历行列
    foreach (Row row in table.Rows)
    {
        int rowIndex = table.Rows.IndexOf(row);
        foreach (Cell cell in row.Cells)
        {
            Console.WriteLine(cell.ToString());
        }
    }
    

    更新表格内容

    DocumentBuilder builder= new DocumentBuilder(doc);
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            builder.MoveTo(table.Rows[i].Cells[j].FirstParagraph);
            builder.Write(dt.Rows[i][j].ToString());
        }
    }
    

    保存word

    doc.Save(txtDocPath.Text.Trim());
    

    注意事项

    去CSDN去下载破解版本的,如果未破解,将会出现红色版权标记。

    参考链接

    https://forum.aspose.com/t/how-to-find-a-table-present-in-word-document-using-aspose-word/46159

    https://forum.aspose.com/t/fill-table-in-word/52564/2

    https://docs.aspose.com/dashboard.action

    https://github.com/asposemarketplace/Aspose_for_OpenXML/wiki/Change-text-in-a-table

    https://docs.aspose.com/display/wordsnet/Introduction+and+Creating+Tables#IntroductionandCreatingTables-InsertingaCloneofanExistingTable

    https://forum.aspose.com/t/replace-text-in-table-cell-but-keep-existing-text-format/47251/11

  • 相关阅读:
    linux终端发送邮件
    ubuntu交换Caps 和 ESC
    pycharm快捷键
    python catch socket timeout
    pgsql restart
    python re.sub
    文件写入与缓存
    HTTP协议再分析
    leetcode-45
    Java的锁
  • 原文地址:https://www.cnblogs.com/liweis/p/7195013.html
Copyright © 2011-2022 走看看