精华内容
下载资源
问答
  • matlab生成word文档

    2020-09-21 21:11:54
    %利用MATLAB生成Word文档 filespec_user = [pwd '\测试.doc'];% 设定测试Word文件名和路径 % 判断Word是否已经打开,若已打开,就在打开的Word中进行操作,否则就打开Word try % 若Word服务器已经打开,返回其句柄...

    经典程序:

    % function ceshi_Word
    %利用MATLAB生成Word文档
    filespec_user = [pwd '\测试.doc'];% 设定测试Word文件名和路径
    % 判断Word是否已经打开,若已打开,就在打开的Word中进行操作,否则就打开Word
    try
    % 若Word服务器已经打开,返回其句柄Word
    Word = actxGetRunningServer('Word.Application');
    catch
    % 否则,创建一个Microsoft Word服务器,返回句柄Word
    Word = actxserver('Word.Application');
    end;
    
    Word.Visible = 1; % 或set(Word, 'Visible', 1);
    % 若测试文件存在,打开该测试文件,否则,新建一个文件,并保存,文件名为测试.doc
    if exist(filespec_user,'file');
        Document = Word.Documents.Open(filespec_user);
        % Document = invoke(Word.Documents,'Open',filespec_user);
    else
    Document = Word.Documents.Add;
    % Document = invoke(Word.Documents, 'Add');
    Document.SaveAs2(filespec_user);
    end
    % 设定光标位置从头开始
    Content = Document.Content;
    Selection = Word.Selection;
    Paragraphformat = Selection.ParagraphFormat;
    % 设定页面大小
    Document.PageSetup.TopMargin = 60; % 单位像素
    Document.PageSetup.BottomMargin = 45;
    Document.PageSetup.LeftMargin = 45;
    Document.PageSetup.RightMargin = 45;
    % Content.InsertParagraphAfter;% 插入一段
    % Content.Collapse=0; % 0为不覆盖
    Content.Start = 0;
    title = '热 老 化 试 验';
    Content.Text = title;           % 写入标题
    Content.Font.Size = 16 ;        % 字体大小
    Content.Font.Bold = 4 ;         % 加粗
    Content.Paragraphs.Alignment = 'wdAlignParagraphCenter';% 设定段落格式    (居中操作)
    Selection.Start = Content.end;% 定义开始的位置  (将光标移动到后面)
    Selection.TypeParagraph;  % 相当于enter键
    % 插入内容并定义字体字号
    xueqi = '( 2009 — 2010 学年 第一学期)';           % 定义一个变量
    Selection.Text = xueqi;                 % 写入变量
    Selection.Font.Size = 12;               % 字体大小
    Selection.Font.Bold = 0; Selection.MoveDown;        % 取消加粗
    paragraphformat.Alignment = 'wdAlignParagraphCenter';    % 居中操作
    Selection.TypeParagraph;                                 % 光标下移,相当于enter键
    Selection.TypeParagraph;            
    Selection.Font.Size = 10.5;
    Tables = Document.Tables.Add(Selection.Range,12,9);      % 创建表格
    DTI = Document.Tables.Item(1); % 或DTI = Tables;
    DTI.Borders.OutsideLineStyle = 'wdLineStyleSingle';% 设置外边框的线型,Dash,DashDot,DashDotDot,DashSmallGap,DashLargeGap,Dot,Double,Triple等
    DTI.Borders.OutsideLineWidth = 'wdLineWidth150pt';% 设置线宽,有025,050,075,100,150,225,300,450,600pt等
    DTI.Borders.InsideLineStyle = 'wdLineStyleSingle';%设置内边框的线型
    DTI.Borders.InsideLineWidth = 'wdLineWidth150pt';
    DTI.Rows.Alignment = 'wdAlignRowCenter';%设置行对齐方式
    DTI.Rows.Item(8).Borders.Item(1).LineStyle = 'wdLineStyleNone';% 设置第8行上边界线型,1,2,3,4分别对应单元格的上、左、下、右边界
    DTI.Rows.Item(8).Borders.Item(3).LineStyle = 'wdLineStyleNone';% 设置第8行下边界线型
    DTI.Rows.Item(11).Borders.Item(1).LineStyle = 'wdLineStyleNone';
    DTI.Rows.Item(11).Borders.Item(3).LineStyle = 'wdLineStyleNone';
    column_width = [53.7736,85.1434,53.7736,35.0094,35.0094,76.6981,55.1887,52.9245,54.9057];% 设置列宽,单位为磅
    row_height = [28.5849,28.5849,28.5849,28.5849,25.4717,25.4717,32.8302,312.1698,17.8302,49.2453,14.1509,18.6792]; % 设置行高
    for i = 1:9
        DTI.Columns.Item(i).Width = column_width(i);            % 设置列宽
    end
    for i = 1:12
        DTI.Rows.Item(i).Height = row_height(i);                % 设置行高
    end
    for i = 1:12
        for j = 1:9
            DTI.Cell(i,j).VerticalAlignment = 'wdCellAlignVerticalCenter';% 设置单元格竖直对齐方式,有Bottome,Center,Top
        end
    end
    % 合并单元格
    DTI.Cell(1, 4).Merge(DTI.Cell(1, 5));
    DTI.Cell(2, 4).Merge(DTI.Cell(2, 5));
    DTI.Cell(3, 4).Merge(DTI.Cell(3, 5));
    DTI.Cell(4, 4).Merge(DTI.Cell(4, 5));
    DTI.Cell(5, 2).Merge(DTI.Cell(5, 5));
    DTI.Cell(5, 3).Merge(DTI.Cell(5, 6));
    DTI.Cell(6, 2).Merge(DTI.Cell(6, 5));
    DTI.Cell(6, 3).Merge(DTI.Cell(6, 6));
    DTI.Cell(5, 1).Merge(DTI.Cell(6, 1));
    DTI.Cell(7, 1).Merge(DTI.Cell(7, 9));
    DTI.Cell(8, 1).Merge(DTI.Cell(8, 9));
    DTI.Cell(9, 1).Merge(DTI.Cell(9, 3));
    DTI.Cell(9, 2).Merge(DTI.Cell(9, 3));
    DTI.Cell(9, 3).Merge(DTI.Cell(9, 4));
    DTI.Cell(9, 4).Merge(DTI.Cell(9, 5));
    DTI.Cell(10, 1).Merge(DTI.Cell(10, 9));
    DTI.Cell(11, 5).Merge(DTI.Cell(11, 9));
    DTI.Cell(12, 5).Merge(DTI.Cell(12, 9));
    DTI.Cell(11, 1).Merge(DTI.Cell(12, 4));
    
    Selection.Start = Content.end; % 设定光标位置为最后
    Selection.TypeParagraph;
    Selection.Text = '主管院长签字: 年 月 日';
    Paragraphformat.Alignment = 'wdAlignParagraphRight';
    Selection.MoveDown; % 下移一行
    % 指定各单元格内容
    DTI.Cell(1,1).Range.Text = '课程名称';
    DTI.Cell(1,3).Range.Text = '课程号';
    DTI.Cell(1,5).Range.Text = '任课教师学院';
    DTI.Cell(1,7).Range.Text = '任课教师';
    
    DTI.Cell(2,1).Range.Text = '授课班级';
    DTI.Cell(2,3).Range.Text = '考试日期';
    DTI.Cell(2,5).Range.Text = '应考人数';
    DTI.Cell(2,7).Range.Text = '实考人数';
    
    DTI.Cell(3,1).Range.Text = '出卷方式';
    DTI.Cell(3,3).Range.Text = '阅卷方式';
    DTI.Cell(3,5).Range.Text = '选用试卷A/B';
    DTI.Cell(3,7).Range.Text = '考试时间';
    
    
    DTI.Cell(4,1).Range.Text = '考试方式';
    DTI.Cell(4,3).Range.Text = '平均分';
    DTI.Cell(4,5).Range.Text = '不及格人数';
    DTI.Cell(4,7).Range.Text = '及格率';
    DTI.Cell(5,1).Range.Text = '成绩分布';
    
    
    DTI.Cell(5,2).Range.Text = '90分以上 人占 %';
    DTI.Cell(5,3).Range.Text = '80---89分 人占 %';
    DTI.Cell(6,2).Range.Text = '70--79分 人占 %';
    DTI.Cell(6,3).Range.Text = '60---69分 人占 %';
    
    
    DTI.Cell(7,1).Range.Text = ['试卷分析(含是否符合教学大纲、难度、知识覆盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中存在的问题及改进措施等内容)'];
    DTI.Cell(7,1).Range.ParagraphFormat.Alignment = 'wdAlignParagraphLeft';
    DTI.Cell(9,2).Range.Text = '签字 :';
    DTI.Cell(9,4).Range.Text = '年 月 日';
    DTI.Cell(10,1).Range.Text = '教研室审阅意见:';
    DTI.Cell(10,1).Range.ParagraphFormat.Alignment = 'wdAlignParagraphLeft';
    DTI.Cell(10,1).VerticalAlignment = 'wdCellAlignVerticalTop';
    DTI.Cell(11,2).Range.Text = '教研室主任(签字): 年 月 日';
    
    DTI.Cell(11,2).Range.ParagraphFormat.Alignment = 'wdAlignParagraphLeft';
    DTI.Cell(8,1).Range.ParagraphFormat.Alignment = 'wdAlignParagraphLeft';
    DTI.Cell(8,1).VerticalAlignment = 'wdCellAlignVerticalTop';% 设定单元格对齐方式
    
    DTI.Cell(9,2).Borders.Item(2).LineStyle = 'wdLineStyleNone';% 隐藏单元格边界
    DTI.Cell(9,2).Borders.Item(4).LineStyle = 'wdLineStyleNone';
    DTI.Cell(9,3).Borders.Item(4).LineStyle = 'wdLineStyleNone';
    DTI.Cell(11,1).Borders.Item(4).LineStyle = 'wdLineStyleNone';
    
    %% 这段可以删除
    Shape = Document.Shapes;% 增加一个对象
    ShapeCount = Shape.Count;% 对象计数
    if ShapeCount ~= 0;% 删除所有的对象
        for i = 1:ShapeCount;
        Shape.Item(1).Delete;
        end;
    end;
    %% 
    % 产生标准正态分布随机数,画直方图,并设置图形属性
    zft = figure('units','normalized','position',[0.280469 0.553385 0.428906 0.251302],'visible','off'); % 新建图形窗口,设为不可见
    set(gca,'position',[0.1 0.2 0.85 0.75]); % 设置坐标系的位置和大小
    data = normrnd(0,1,1000,1); % 产生标准正态分布随机数
    hist(data); % 绘制标准正态分布随机数的频数直方图
    grid on; % 添加参考网格
    xlabel('考试成绩'); % 为X轴加标签
    ylabel('人数'); % 为Y轴加标签
    % 将图形复制到粘贴板
    hgexport(zft, '-clipboard');
    
    % 将图形粘贴到当前文档里(表格的第8行第1列的单元格里),并设置图形版式为浮于文字上方
    % Selection.Range.PasteSpecial;
    DTI.Cell(8,1).Range.Paragraphs.Item(1).Range.Paste; % 设置图片为嵌入式,与图片为浮于文字上方相互转化为ConvertToInlineShape,ConvertToShape
    delete(zft); % 删除图形句柄
    Document.ActiveWindow.ActivePane.View.Type = 'wdPrintView'; % 设置视图方式为页面
    Document.Save; % 保存文档
    Document.Close; % 关闭文档
    Word.Quit; % 退出word服务器

     

    展开全文
  • 需求描述:朋友在平时工作中会...由于其涉及文件隐私,将需求简化如下:我这提供一份PDF版《笨办法学Python》,想把其中第五页的第1段和第4段填充到Word文档 “笔记.docx” 特定位置: 上图为PDF中的目标文字...

    需求描述:朋友在平时工作中会经常重复性地打开不同PDF文件,选取其中特定的几组信息复制粘贴到不同的Word文档中,完成一份PDF文件平均耗时15分钟,想试试Python代码能否帮忙。


     

    由于其涉及文件隐私,将需求简化如下:我这提供一份PDF版《笨办法学Python》,想把其中第五页的第1段和第4段填充到Word文档 “笔记.docx” 特定位置:

     

    上图为PDF中的目标文字;下图为Word文档要填充的位置:

     

    思路

    首先利用PDFMiner模块解析PDF文件,转化成PDF内容的文本列表;根据目标位置在列表中提取目标文本;利用Python处理Word文档的库docx-mailmerge模块,进行文本填充。

    PDFMiner模块

    PDFMiner是一个专注于从PDF文档中提取、分析文本信息的工具。它不仅可以获取特定页码特定位置处的信息,也能获得字体等信息。其工作原理如图所示:

     

    看不懂原理图没关系,我们关心的是应用问题。首先安装PDFMiner,注意Python3要安装pdfminer3k,可以通过pip install pdfminer3k进行安装

    解析PDF涉及代码步骤较多,先不展开,文末提供注释源码供参考。通过PDFMiner解析,文本内容按区域存到不同页码的文本list中;每一页又作为元素存入整个文档的list中。即假设content代表整个PDF文本信息,content[0]为第一页信息,content[4]即我们想要的第五页信息。而第五页中,按照list元素顺序,我们想要的第一段和第四段就可以通过content[4][1]和content[4][4]拿到了:

     

    docx-mailmerge模块

    这个模块的应用类似于你先在Word文档中特定位置去定义好变量,之后在代码中通过MailMerge函数为变量赋值。

    首先是安装:pip install docx-mailmerge

    接下来去Word文档中定义要插入的变量,在要插入文本的位置选择 “插入”→“文档部件”→“域”:

     

    在弹出的窗口中选择mailmerge变量,中文直译“邮件合并”,域名是自己定义的变量名,这里我用firstTED 来代表第一段:

     

    设置完成后会看到<<firstTED>>出现在Word文档中。同理,我们设置fourthTED来代表第四段,最终结果如图:

     

    至此,Word文档中变量定义完成,继续回到代码中。我们已经拿到了第一段和第四段的文本,接下来就是将其和新定义的firstTED 和 fourthTED 融合:

    template = "../读书笔记.docx"document = MailMerge(template)document.merge(    firstTED = content[4][1],    fourthTED = content[4][4],)document.write("读书笔记更新.docx")

    最终在PDF文件旁会生成新的“读书笔记更新.docx”:

    其内容如图:

     

    目标达成!

    展开全文
  • 一、首先下载相对应的jar包:freemarker.jar;...二、自定义Word模板,另存为.XML文件,打开进行相对应的编辑; Word模板如下图: 另存为.XML文件如下图: 在线格式化工具:http://tool.oschina.net/codef
    一、首先下载相对应的jar包:freemarker.jar;
    而我的项目环境是:maven
    在pom.xml中:
    <dependency>
    <groupId>freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.8</version>
    </dependency>
    二、自定义Word模板,另存为.XML文件,打开进行相对应的编辑;
    Word模板如下图:
    另存为.XML文件如下图:
    在线格式化工具:http://tool.oschina.net/codeformat/xml/
    打开xml文件,搜索start,end;将其改成:${start},${end}
    其模板有遍历的内容,所有要对其设置:
    搜索:<w:tr
    找到第一个,tr的意思不用解释了吧,代表着一行。
    这也意味着找到了Table中的第一行,但是需要遍历的不是从第一行开始,而是从第二行。
    好的,继续搜索,找到第二个。


    </w:tr>  
    <#list list2 as test>  
    <w:tr wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidTr="00F95F67">


    在它的头上加一个<#list 你的集合名称 as xxxx>  
    ok,有开头就有结尾,玩过JSP上的EL表达式应该不会感觉很陌生吧。(比如:<w:t>${test.mir}</w:t>等)
    搜索 </w:tr>
    同样找到第二个,加上</#list>结束符。
    好的,这样就没问题了。
    </w:tr>
    </#list>  
    </w:tbl>
    注:我的集合名称是:list2(名称可以自定义);我的集合别名是:test(名称也可以自定义,与下面表达式的保持一致)
    三、编辑完成后,把文件后缀名改成.ftl格式;


    四、部分代码如下;


    在table01.ftl文件中:
    <?xml version="1.0" encoding="utf-8"?>
    <?mso-application progid="Word.Document"?>


    <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
      <w:ignoreSubtree w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/>
      <o:DocumentProperties>
        <o:Author>Microsoft</o:Author>
        <o:LastAuthor>Microsoft</o:LastAuthor>
        <o:Revision>2</o:Revision>
        <o:TotalTime>1</o:TotalTime>
        <o:Created>2017-05-03T02:03:00Z</o:Created>
        <o:LastSaved>2017-05-03T02:03:00Z</o:LastSaved>
        <o:Pages>1</o:Pages>
        <o:Words>11</o:Words>
        <o:Characters>67</o:Characters>
        <o:Company>CHINA</o:Company>
        <o:Lines>1</o:Lines>
        <o:Paragraphs>1</o:Paragraphs>
        <o:CharactersWithSpaces>77</o:CharactersWithSpaces>
        <o:Version>12</o:Version>
      </o:DocumentProperties>
      <w:fonts>
        <w:defaultFonts w:ascii="Calibri" w:fareast="宋体" w:h-ansi="Calibri" w:cs="Times New Roman"/>
        <w:font w:name="Times New Roman">
          <w:panose-1 w:val="02020603050405020304"/>
          <w:charset w:val="00"/>
          <w:family w:val="Roman"/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb-0="E0002AFF" w:usb-1="C0007841" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/>
        </w:font>
        <w:font w:name="宋体">
          <w:altName w:val="SimSun"/>
          <w:panose-1 w:val="02010600030101010101"/>
          <w:charset w:val="86"/>
          <w:family w:val="auto"/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
        </w:font>
        <w:font w:name="Cambria Math">
          <w:panose-1 w:val="02040503050406030204"/>
          <w:charset w:val="01"/>
          <w:family w:val="Roman"/>
          <w:notTrueType/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000" w:csb-1="00000000"/>
        </w:font>
        <w:font w:name="Calibri">
          <w:panose-1 w:val="020F0502020204030204"/>
          <w:charset w:val="00"/>
          <w:family w:val="Swiss"/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb-0="E00002FF" w:usb-1="4000ACFF" w:usb-2="00000001" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/>
        </w:font>
        <w:font w:name="@宋体">
          <w:panose-1 w:val="02010600030101010101"/>
          <w:charset w:val="86"/>
          <w:family w:val="auto"/>
          <w:pitch w:val="variable"/>
          <w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/>
        </w:font>
      </w:fonts>
      <w:styles>
        <w:versionOfBuiltInStylenames w:val="7"/>
        <w:latentStyles w:defLockedState="off" w:latentStyleCount="267">
          <w:lsdException w:name="Normal"/>
          <w:lsdException w:name="heading 1"/>
          <w:lsdException w:name="heading 2"/>
          <w:lsdException w:name="heading 3"/>
          <w:lsdException w:name="heading 4"/>
          <w:lsdException w:name="heading 5"/>
          <w:lsdException w:name="heading 6"/>
          <w:lsdException w:name="heading 7"/>
          <w:lsdException w:name="heading 8"/>
          <w:lsdException w:name="heading 9"/>
          <w:lsdException w:name="toc 1"/>
          <w:lsdException w:name="toc 2"/>
          <w:lsdException w:name="toc 3"/>
          <w:lsdException w:name="toc 4"/>
          <w:lsdException w:name="toc 5"/>
          <w:lsdException w:name="toc 6"/>
          <w:lsdException w:name="toc 7"/>
          <w:lsdException w:name="toc 8"/>
          <w:lsdException w:name="toc 9"/>
          <w:lsdException w:name="caption"/>
          <w:lsdException w:name="Title"/>
          <w:lsdException w:name="Default Paragraph Font"/>
          <w:lsdException w:name="Subtitle"/>
          <w:lsdException w:name="Strong"/>
          <w:lsdException w:name="Emphasis"/>
          <w:lsdException w:name="Table Grid"/>
          <w:lsdException w:name="Placeholder Text"/>
          <w:lsdException w:name="No Spacing"/>
          <w:lsdException w:name="Light Shading"/>
          <w:lsdException w:name="Light List"/>
          <w:lsdException w:name="Light Grid"/>
          <w:lsdException w:name="Medium Shading 1"/>
          <w:lsdException w:name="Medium Shading 2"/>
          <w:lsdException w:name="Medium List 1"/>
          <w:lsdException w:name="Medium List 2"/>
          <w:lsdException w:name="Medium Grid 1"/>
          <w:lsdException w:name="Medium Grid 2"/>
          <w:lsdException w:name="Medium Grid 3"/>
          <w:lsdException w:name="Dark List"/>
          <w:lsdException w:name="Colorful Shading"/>
          <w:lsdException w:name="Colorful List"/>
          <w:lsdException w:name="Colorful Grid"/>
          <w:lsdException w:name="Light Shading Accent 1"/>
          <w:lsdException w:name="Light List Accent 1"/>
          <w:lsdException w:name="Light Grid Accent 1"/>
          <w:lsdException w:name="Medium Shading 1 Accent 1"/>
          <w:lsdException w:name="Medium Shading 2 Accent 1"/>
          <w:lsdException w:name="Medium List 1 Accent 1"/>
          <w:lsdException w:name="Revision"/>
          <w:lsdException w:name="List Paragraph"/>
          <w:lsdException w:name="Quote"/>
          <w:lsdException w:name="Intense Quote"/>
          <w:lsdException w:name="Medium List 2 Accent 1"/>
          <w:lsdException w:name="Medium Grid 1 Accent 1"/>
          <w:lsdException w:name="Medium Grid 2 Accent 1"/>
          <w:lsdException w:name="Medium Grid 3 Accent 1"/>
          <w:lsdException w:name="Dark List Accent 1"/>
          <w:lsdException w:name="Colorful Shading Accent 1"/>
          <w:lsdException w:name="Colorful List Accent 1"/>
          <w:lsdException w:name="Colorful Grid Accent 1"/>
          <w:lsdException w:name="Light Shading Accent 2"/>
          <w:lsdException w:name="Light List Accent 2"/>
          <w:lsdException w:name="Light Grid Accent 2"/>
          <w:lsdException w:name="Medium Shading 1 Accent 2"/>
          <w:lsdException w:name="Medium Shading 2 Accent 2"/>
          <w:lsdException w:name="Medium List 1 Accent 2"/>
          <w:lsdException w:name="Medium List 2 Accent 2"/>
          <w:lsdException w:name="Medium Grid 1 Accent 2"/>
          <w:lsdException w:name="Medium Grid 2 Accent 2"/>
          <w:lsdException w:name="Medium Grid 3 Accent 2"/>
          <w:lsdException w:name="Dark List Accent 2"/>
          <w:lsdException w:name="Colorful Shading Accent 2"/>
          <w:lsdException w:name="Colorful List Accent 2"/>
          <w:lsdException w:name="Colorful Grid Accent 2"/>
          <w:lsdException w:name="Light Shading Accent 3"/>
          <w:lsdException w:name="Light List Accent 3"/>
          <w:lsdException w:name="Light Grid Accent 3"/>
          <w:lsdException w:name="Medium Shading 1 Accent 3"/>
          <w:lsdException w:name="Medium Shading 2 Accent 3"/>
          <w:lsdException w:name="Medium List 1 Accent 3"/>
          <w:lsdException w:name="Medium List 2 Accent 3"/>
          <w:lsdException w:name="Medium Grid 1 Accent 3"/>
          <w:lsdException w:name="Medium Grid 2 Accent 3"/>
          <w:lsdException w:name="Medium Grid 3 Accent 3"/>
          <w:lsdException w:name="Dark List Accent 3"/>
          <w:lsdException w:name="Colorful Shading Accent 3"/>
          <w:lsdException w:name="Colorful List Accent 3"/>
          <w:lsdException w:name="Colorful Grid Accent 3"/>
          <w:lsdException w:name="Light Shading Accent 4"/>
          <w:lsdException w:name="Light List Accent 4"/>
          <w:lsdException w:name="Light Grid Accent 4"/>
          <w:lsdException w:name="Medium Shading 1 Accent 4"/>
          <w:lsdException w:name="Medium Shading 2 Accent 4"/>
          <w:lsdException w:name="Medium List 1 Accent 4"/>
          <w:lsdException w:name="Medium List 2 Accent 4"/>
          <w:lsdException w:name="Medium Grid 1 Accent 4"/>
          <w:lsdException w:name="Medium Grid 2 Accent 4"/>
          <w:lsdException w:name="Medium Grid 3 Accent 4"/>
          <w:lsdException w:name="Dark List Accent 4"/>
          <w:lsdException w:name="Colorful Shading Accent 4"/>
          <w:lsdException w:name="Colorful List Accent 4"/>
          <w:lsdException w:name="Colorful Grid Accent 4"/>
          <w:lsdException w:name="Light Shading Accent 5"/>
          <w:lsdException w:name="Light List Accent 5"/>
          <w:lsdException w:name="Light Grid Accent 5"/>
          <w:lsdException w:name="Medium Shading 1 Accent 5"/>
          <w:lsdException w:name="Medium Shading 2 Accent 5"/>
          <w:lsdException w:name="Medium List 1 Accent 5"/>
          <w:lsdException w:name="Medium List 2 Accent 5"/>
          <w:lsdException w:name="Medium Grid 1 Accent 5"/>
          <w:lsdException w:name="Medium Grid 2 Accent 5"/>
          <w:lsdException w:name="Medium Grid 3 Accent 5"/>
          <w:lsdException w:name="Dark List Accent 5"/>
          <w:lsdException w:name="Colorful Shading Accent 5"/>
          <w:lsdException w:name="Colorful List Accent 5"/>
          <w:lsdException w:name="Colorful Grid Accent 5"/>
          <w:lsdException w:name="Light Shading Accent 6"/>
          <w:lsdException w:name="Light List Accent 6"/>
          <w:lsdException w:name="Light Grid Accent 6"/>
          <w:lsdException w:name="Medium Shading 1 Accent 6"/>
          <w:lsdException w:name="Medium Shading 2 Accent 6"/>
          <w:lsdException w:name="Medium List 1 Accent 6"/>
          <w:lsdException w:name="Medium List 2 Accent 6"/>
          <w:lsdException w:name="Medium Grid 1 Accent 6"/>
          <w:lsdException w:name="Medium Grid 2 Accent 6"/>
          <w:lsdException w:name="Medium Grid 3 Accent 6"/>
          <w:lsdException w:name="Dark List Accent 6"/>
          <w:lsdException w:name="Colorful Shading Accent 6"/>
          <w:lsdException w:name="Colorful List Accent 6"/>
          <w:lsdException w:name="Colorful Grid Accent 6"/>
          <w:lsdException w:name="Subtle Emphasis"/>
          <w:lsdException w:name="Intense Emphasis"/>
          <w:lsdException w:name="Subtle Reference"/>
          <w:lsdException w:name="Intense Reference"/>
          <w:lsdException w:name="Book Title"/>
          <w:lsdException w:name="Bibliography"/>
          <w:lsdException w:name="TOC Heading"/>
        </w:latentStyles>
        <w:style w:type="paragraph" w:default="on" w:styleId="a">
          <w:name w:val="Normal"/>
          <wx:uiName wx:val="正文"/>
          <w:rsid w:val="001C5C68"/>
          <w:pPr>
            <w:widowControl w:val="off"/>
            <w:jc w:val="both"/>
          </w:pPr>
          <w:rPr>
            <wx:font wx:val="Calibri"/>
            <w:kern w:val="2"/>
            <w:sz w:val="21"/>
            <w:sz-cs w:val="22"/>
            <w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/>
          </w:rPr>
        </w:style>
        <w:style w:type="character" w:default="on" w:styleId="a0">
          <w:name w:val="Default Paragraph Font"/>
          <wx:uiName wx:val="默认段落字体"/>
        </w:style>
        <w:style w:type="table" w:default="on" w:styleId="a1">
          <w:name w:val="Normal Table"/>
          <wx:uiName wx:val="普通表格"/>
          <w:rPr>
            <wx:font wx:val="Calibri"/>
            <w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/>
          </w:rPr>
          <w:tblPr>
            <w:tblInd w:w="0" w:type="dxa"/>
            <w:tblCellMar>
              <w:top w:w="0" w:type="dxa"/>
              <w:left w:w="108" w:type="dxa"/>
              <w:bottom w:w="0" w:type="dxa"/>
              <w:right w:w="108" w:type="dxa"/>
            </w:tblCellMar>
          </w:tblPr>
        </w:style>
        <w:style w:type="list" w:default="on" w:styleId="a2">
          <w:name w:val="No List"/>
          <wx:uiName wx:val="无列表"/>
        </w:style>
        <w:style w:type="paragraph" w:styleId="a3">
          <w:name w:val="header"/>
          <wx:uiName wx:val="页眉"/>
          <w:basedOn w:val="a"/>
          <w:link w:val="Char"/>
          <w:rsid w:val="00784607"/>
          <w:pPr>
            <w:pBdr>
              <w:bottom w:val="single" w:sz="6" wx:bdrwidth="15" w:space="1" w:color="auto"/>
            </w:pBdr>
            <w:tabs>
              <w:tab w:val="center" w:pos="4153"/>
              <w:tab w:val="right" w:pos="8306"/>
            </w:tabs>
            <w:snapToGrid w:val="off"/>
            <w:jc w:val="center"/>
          </w:pPr>
          <w:rPr>
            <wx:font wx:val="Calibri"/>
            <w:sz w:val="18"/>
            <w:sz-cs w:val="18"/>
          </w:rPr>
        </w:style>
        <w:style w:type="character" w:styleId="Char">
          <w:name w:val="页眉 Char"/>
          <w:basedOn w:val="a0"/>
          <w:link w:val="a3"/>
          <w:rsid w:val="00784607"/>
          <w:rPr>
            <w:sz w:val="18"/>
            <w:sz-cs w:val="18"/>
          </w:rPr>
        </w:style>
        <w:style w:type="paragraph" w:styleId="a4">
          <w:name w:val="footer"/>
          <wx:uiName wx:val="页脚"/>
          <w:basedOn w:val="a"/>
          <w:link w:val="Char0"/>
          <w:rsid w:val="00784607"/>
          <w:pPr>
            <w:tabs>
              <w:tab w:val="center" w:pos="4153"/>
              <w:tab w:val="right" w:pos="8306"/>
            </w:tabs>
            <w:snapToGrid w:val="off"/>
            <w:jc w:val="left"/>
          </w:pPr>
          <w:rPr>
            <wx:font wx:val="Calibri"/>
            <w:sz w:val="18"/>
            <w:sz-cs w:val="18"/>
          </w:rPr>
        </w:style>
        <w:style w:type="character" w:styleId="Char0">
          <w:name w:val="页脚 Char"/>
          <w:basedOn w:val="a0"/>
          <w:link w:val="a4"/>
          <w:rsid w:val="00784607"/>
          <w:rPr>
            <w:sz w:val="18"/>
            <w:sz-cs w:val="18"/>
          </w:rPr>
        </w:style>
        <w:style w:type="character" w:styleId="a5">
          <w:name w:val="Strong"/>
          <wx:uiName wx:val="要点"/>
          <w:basedOn w:val="a0"/>
          <w:rsid w:val="00784607"/>
          <w:rPr>
            <w:b/>
            <w:b-cs/>
          </w:rPr>
        </w:style>
        <w:style w:type="table" w:styleId="a6">
          <w:name w:val="Table Grid"/>
          <wx:uiName wx:val="网格型"/>
          <w:basedOn w:val="a1"/>
          <w:rsid w:val="00784607"/>
          <w:rPr>
            <wx:font wx:val="Calibri"/>
          </w:rPr>
          <w:tblPr>
            <w:tblInd w:w="0" w:type="dxa"/>
            <w:tblBorders>
              <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
            </w:tblBorders>
            <w:tblCellMar>
              <w:top w:w="0" w:type="dxa"/>
              <w:left w:w="108" w:type="dxa"/>
              <w:bottom w:w="0" w:type="dxa"/>
              <w:right w:w="108" w:type="dxa"/>
            </w:tblCellMar>
          </w:tblPr>
        </w:style>
      </w:styles>
      <w:shapeDefaults>
        <o:shapedefaults v:ext="edit" spidmax="5122"/>
        <o:shapelayout v:ext="edit">
          <o:idmap v:ext="edit" data="2"/>
        </o:shapelayout>
      </w:shapeDefaults>
      <w:docPr>
        <w:view w:val="print"/>
        <w:zoom w:percent="100"/>
        <w:doNotEmbedSystemFonts/>
        <w:bordersDontSurroundHeader/>
        <w:bordersDontSurroundFooter/>
        <w:defaultTabStop w:val="420"/>
        <w:drawingGridVerticalSpacing w:val="156"/>
        <w:displayHorizontalDrawingGridEvery w:val="0"/>
        <w:displayVerticalDrawingGridEvery w:val="2"/>
        <w:punctuationKerning/>
        <w:characterSpacingControl w:val="CompressPunctuation"/>
        <w:optimizeForBrowser/>
        <w:validateAgainstSchema/>
        <w:saveInvalidXML w:val="off"/>
        <w:ignoreMixedContent w:val="off"/>
        <w:alwaysShowPlaceholderText w:val="off"/>
        <w:hdrShapeDefaults>
          <o:shapedefaults v:ext="edit" spidmax="5122"/>
        </w:hdrShapeDefaults>
        <w:footnotePr>
          <w:footnote w:type="separator">
            <w:p wsp:rsidR="00D6766A" wsp:rsidRDefault="00D6766A" wsp:rsidP="00784607">
              <w:r>
                <w:separator/>
              </w:r>
            </w:p>
          </w:footnote>
          <w:footnote w:type="continuation-separator">
            <w:p wsp:rsidR="00D6766A" wsp:rsidRDefault="00D6766A" wsp:rsidP="00784607">
              <w:r>
                <w:continuationSeparator/>
              </w:r>
            </w:p>
          </w:footnote>
        </w:footnotePr>
        <w:endnotePr>
          <w:endnote w:type="separator">
            <w:p wsp:rsidR="00D6766A" wsp:rsidRDefault="00D6766A" wsp:rsidP="00784607">
              <w:r>
                <w:separator/>
              </w:r>
            </w:p>
          </w:endnote>
          <w:endnote w:type="continuation-separator">
            <w:p wsp:rsidR="00D6766A" wsp:rsidRDefault="00D6766A" wsp:rsidP="00784607">
              <w:r>
                <w:continuationSeparator/>
              </w:r>
            </w:p>
          </w:endnote>
        </w:endnotePr>
        <w:compat>
          <w:spaceForUL/>
          <w:balanceSingleByteDoubleByteWidth/>
          <w:doNotLeaveBackslashAlone/>
          <w:ulTrailSpace/>
          <w:doNotExpandShiftReturn/>
          <w:adjustLineHeightInTable/>
          <w:breakWrappedTables/>
          <w:snapToGridInCell/>
          <w:wrapTextWithPunct/>
          <w:useAsianBreakRules/>
          <w:dontGrowAutofit/>
          <w:useFELayout/>
        </w:compat>
        <wsp:rsids>
          <wsp:rsidRoot wsp:val="00784607"/>
          <wsp:rsid wsp:val="001C5C68"/>
          <wsp:rsid wsp:val="00676513"/>
          <wsp:rsid wsp:val="00784607"/>
          <wsp:rsid wsp:val="00912558"/>
          <wsp:rsid wsp:val="00D6766A"/>
          <wsp:rsid wsp:val="00E047A6"/>
          <wsp:rsid wsp:val="00F95F67"/>
        </wsp:rsids>
      </w:docPr>
      <w:body>
        <w:p wsp:rsidR="001C5C68" wsp:rsidRDefault="00784607" wsp:rsidP="00784607">
          <w:pPr>
            <w:jc w:val="center"/>
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
          </w:pPr>
          <w:r wsp:rsidRPr="00E047A6">
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
            <w:t>表1:</w:t>
          </w:r>
          <w:r wsp:rsidR="00E047A6">
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
            <w:t>${start}</w:t>
          </w:r>
          <w:r wsp:rsidRPr="00E047A6">
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
            <w:t>时</w:t>
          </w:r>
          <w:r wsp:rsidRPr="00E047A6">
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
            <w:t>--</w:t>
          </w:r>
          <w:r wsp:rsidR="00E047A6">
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
            <w:t>${end}</w:t>
          </w:r>
          <w:r wsp:rsidRPr="00E047A6">
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
            <w:t>时各区降雨量分布(单位:毫米)</w:t>
          </w:r>
        </w:p>
        <w:p wsp:rsidR="00E047A6" wsp:rsidRPr="00E047A6" wsp:rsidRDefault="00E047A6" wsp:rsidP="00784607">
          <w:pPr>
            <w:jc w:val="center"/>
            <w:rPr>
              <w:rStyle w:val="a5"/>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
              <wx:font wx:val="宋体"/>
              <w:sz w:val="24"/>
              <w:sz-cs w:val="24"/>
            </w:rPr>
          </w:pPr>
        </w:p>
        <w:tbl>
          <w:tblPr>
            <w:tblW w:w="0" w:type="auto"/>
            <w:tblBorders>
              <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
              <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/>
            </w:tblBorders>
            <w:tblLook w:val="04A0"/>
          </w:tblPr>
          <w:tblGrid>
            <w:gridCol w:w="2130"/>
            <w:gridCol w:w="2130"/>
            <w:gridCol w:w="2131"/>
            <w:gridCol w:w="2131"/>
          </w:tblGrid>
          <w:tr wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidTr="00F95F67">
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2130" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00784607" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>区域</w:t>
                </w:r>
              </w:p>
            </w:tc>
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2130" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00784607" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>平均雨量</w:t>
                </w:r>
              </w:p>
            </w:tc>
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2131" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00784607" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>最大累积雨量</w:t>
                </w:r>
              </w:p>
            </w:tc>
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2131" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00784607" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>最大小时滑动雨量</w:t>
                </w:r>
              </w:p>
            </w:tc>
          </w:tr>
     
     
     <#list list2 as test>
     
          <w:tr wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidTr="00F95F67">
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2130" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00912558" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>${test.area}</w:t>
                </w:r>
              </w:p>
            </w:tc>
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2130" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00912558" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>${test.rain}</w:t>
                </w:r>
              </w:p>
            </w:tc>
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2131" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00912558" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>${test.mrain}</w:t>
                </w:r>
              </w:p>
            </w:tc>
            <w:tc>
              <w:tcPr>
                <w:tcW w:w="2131" w:type="dxa"/>
              </w:tcPr>
              <w:p wsp:rsidR="00784607" wsp:rsidRPr="00F95F67" wsp:rsidRDefault="00912558" wsp:rsidP="00F95F67">
                <w:pPr>
                  <w:jc w:val="center"/>
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                </w:pPr>
                <w:r wsp:rsidRPr="00F95F67">
                  <w:rPr>
                    <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:cs="Times New Roman" w:hint="fareast"/>
                    <wx:font wx:val="宋体"/>
                    <w:sz-cs w:val="21"/>
                  </w:rPr>
                  <w:t>${test.mir}</w:t>
                </w:r>
              </w:p>
            </w:tc>
          </w:tr>
     
     
     </#list>
     
        </w:tbl>
        <w:p wsp:rsidR="00784607" wsp:rsidRPr="00784607" wsp:rsidRDefault="00784607" wsp:rsidP="00784607">
          <w:pPr>
            <w:jc w:val="left"/>
            <w:rPr>
              <w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
              <wx:font wx:val="宋体"/>
              <w:sz-cs w:val="21"/>
            </w:rPr>
          </w:pPr>
        </w:p>
        <w:sectPr wsp:rsidR="00784607" wsp:rsidRPr="00784607" wsp:rsidSect="001C5C68">
          <w:pgSz w:w="11906" w:h="16838"/>
          <w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0"/>
          <w:cols w:space="425"/>
          <w:docGrid w:type="lines" w:line-pitch="312"/>
        </w:sectPr>
      </w:body>
    </w:wordDocument>




    在yuqing2.jsp中:(部分代码)


    <!-- 2017.05.02 添加 -->
    <input id="day" hidden="true"  value="${day }"/>
    <input id="end" hidden="true"  value="${end }"/>
    <a href="javascript:void(0)" style="width: 120px;height: 22px;" class="easyui-linkbutton"  οnclick="table01()">导出到Word</a><br/><br/>
    <!-- 2017.05.02 结束 -->


    在export.js中:
    function table01(){
    var stime = $('#day').val();
    var etime = $('#end').val();
    $.ajax({
    type:"POST",
    url:path+"/yuqing/table01",
    data:{
    stime:stime,
    etime : etime
    },
    cache:false,
    dataType:"json",
    async:false,
    success:function(data){
    if(data==1){
    alert("导出成功!文件存放到桌面!");
    }
    else{
    alert("导出失败!");
    }
    }
    });
    }


    在YuqingController.java中:(部分代码)
    @RequestMapping(value ="/table06")
    public @ResponseBody String table06(HttpServletRequest request,HttpServletResponse response,Model model){
    //导出代码:开始
    Configuration configuration = new Configuration();
    configuration.setDefaultEncoding("UTF-8"); //设置编码
    Map<String,Object> dataMap=new HashMap<String,Object>();
    dataMap.put("start", stime); //开始日期
    dataMap.put("end", etime); //结束日期

    List<Map<String,Object>> list2 = new ArrayList<Map<String,Object>>();
    for(int i=0;i<list.size();i++) { //遍历结果
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("area", list.get(i).getArea().toString());
    map.put("rain",list.get(i).getRain().toString());
    map.put("mrain", list.get(i).getMrain().toString());
    map.put("mir",list.get(i).getMir().toString());

    list2.add(map);
    }
    dataMap.put("list2", list2);
    configuration.setDirectoryForTemplateLoading(new File("F:\\4\\")); //绝对路径
    Template t2=null;
    try {
    t2 = configuration.getTemplate("table01.ftl"); //ftl文件名
    } catch (IOException e) {
    e.printStackTrace();
    }


    File outFile = new File("C:/Users/Administrator/Desktop/word"+Math.random()*10000+".doc"); //桌面路径
    Writer out = null;
    try {
    out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));

    } catch (FileNotFoundException e1) {
    e1.printStackTrace();
    }
     
    try {
    t2.process(dataMap, out);
    out.close();  //输出流一定要关闭;否则,生成的word文档打不开
    } catch (TemplateException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    //导出代码:结束
    return "1";
    }


    五、导出结果如下图:
    六、参考代码如下:


    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;


    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;


    public class WordTest {

    private Configuration configuration = null;

    public WordTest(){
    configuration = new Configuration();
    configuration.setDefaultEncoding("UTF-8");
    }

    public static void main(String[] args) {
    WordTest test = new WordTest();
    test.createWord();
    }

    public void createWord(){
    Map<String,Object> dataMap=new HashMap<String,Object>();
    getData(dataMap);
    configuration.setClassForTemplateLoading(this.getClass(), "/com");  //FTL文件所存在的位置
    //configuration.setDirectoryForTemplateLoading(new File("F:\\4\\")); //绝对路径
    Template t=null;
    try {
    t = configuration.getTemplate("wordModel.ftl"); //文件名
    } catch (IOException e) {
    e.printStackTrace();
    }
    File outFile = new File("O:/outFilessa"+Math.random()*10000+".doc");
    Writer out = null;
    try {
    out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
    } catch (FileNotFoundException e1) {
    e1.printStackTrace();
    }
     
            try {
    t.process(dataMap, out);
    } catch (TemplateException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }


    private void getData(Map<String, Object> dataMap) {
    dataMap.put("title", "标题");
    dataMap.put("year", "2017");
    dataMap.put("month", "05");
    dataMap.put("day", "03");
    dataMap.put("auditor", "XXX");
    dataMap.put("phone", "XXXXXXXXXX");
    dataMap.put("weave", "XXX");

    List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    for (int i = 0; i < 10; i++) {
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("number", i);
    map.put("content", "内容"+i);
    list.add(map);
    }

    dataMap.put("list", list);
    }

    }




    展开全文
  • 目录修订历史环境安装0.Python-docx新建文档1.Python-docx编辑已存在文档2.win32com将doc转为docx3.win32com操作word3.1 打开新的word文档并添加内容3.2 打开已存在word文档并添加内容3.3 转换word为pdf4.Python-...

    修订历史

    更新日期 版本号 备注 修改者
    2020.9.3 v1.0 新建 超级大洋葱

    环境安装

    ​ 使用Python操作word大部分情况都是写操作,也有少许情况会用到读操作,在本次教程种都会进行讲解。

    本次课程主要用到以下4个库,请大家提前安装:

    1. 升级pip (便于安装最新库)

      python -m pip install -U pip setuptools
      

      image-20200902152119771

    2. python-docx (我们大部分操作都是使用此库)

      安装方法:

      pip install python-docx
      

      image-20200902150058820

      使用方法:

      from docx import Document
      from docx.shared import Inches
      

      官方文档:

      https://python-docx.readthedocs.io/en/latest/index.html

    3. win32com (主要用作doc转docx格式转换用)

      安装方法:

      pip install pypiwin32
      

      image-20200902150735938

      使用方法:

      import win32com
      from win32com.client import Dispatch, constants
      

      官方文档:

      https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word?view=word-pia

    4. mailmerge (用作按照模板生成大量同类型文档)

      安装方法:

      pip install docx-mailmerge
      

      image-20200902151225508

      使用方法:

      from mailmerge import MailMerge
      

      官方文档:

      https://pypi.org/project/docx-mailmerge/

    5. matplotlib (Python 的绘图库,本期简单讲解,后期会有专门的课程)

      安装方法:

      pip install matplotlib
      

      image-20200902151810771

      使用方法:

      import matplotlib.pyplot as plt
      

      官方文档:

      https://matplotlib.org/3.2.2/tutorials/introductory/sample_plots.html

      image-20200902152236893

    0.Python-docx新建文档

    示例代码1:

    from docx import Document
    document = Document()
    document.save('new.docx')
    

    效果如下:

    image-20200902153615368

    示例代码 0.1 Python-docx新建文档.py

    from docx import Document
    
    def GenerateNewWord(filename):
        document = Document()
        document.save(filename)
    
    if __name__ == "__main__":
        print("大家好!我们今天开始学习word文档自动化")
        print("我们先来直接生成一个名为‘new.docx’的文档")
        document = Document()
        document.save('new.docx')
    
        print("没错,里面什么都没有")
    
        # 我是华丽的分隔符
        
        print("我们使用函数生成一个word文档试试")
        newname = '使用函数生成的文档.docx'
        GenerateNewWord(newname)
    

    效果如下:

    image-20200902153745036

    1.Python-docx编辑已存在文档

    我们很多时候需要在已存在的word文档上添加自己的内容,那么我们赶紧看看应该怎样操作吧~

    旧文档:

    image-20200902154542940

    示例代码:

    from docx import Document
    document = Document('exist.docx')
    document.save('new.docx')
    

    也许你会说,没有没搞错,就这三句话? 是的,就这三句,你就完成了旧文档的复制,如果你想修改,直接添加内容就行了呢!

    效果如下:

    image-20200902155046051

    2.win32com将doc转为docx

    旧文档:
    image-20200902161000891

    示例代码:

    import os
    from win32com import client as wc
    
    def TransDocToDocx(oldDocName,newDocxName):
        print("我是 TransDocToDocx 函数")
        # 打开word应用程序
        word = wc.Dispatch('Word.Application')
    
        # 打开 旧word 文件
        doc = word.Documents.Open(oldDocName)
    
        # 保存为 新word 文件,其中参数 12 表示的是docx文件
        doc.SaveAs(newDocxName, 12)
    
        # 关闭word文档
        doc.Close()
        word.Quit()
    
        print("生成完毕!")
    
    if __name__ == "__main__":
        # 获取当前目录完整路径
        currentPath = os.getcwd()
        print("当前路径为:",currentPath)
    
        # 获取 旧doc格式word文件绝对路径名
        docName = os.path.join(currentPath,'旧doc格式文档.doc')
        print("docFilePath = ", docName)
    
        # 设置新docx格式文档文件名
        docxName = os.path.join(currentPath,'新生成docx格式文档.docx')
    
        TransDocToDocx(docName,docxName)
    

    效果如下:

    image-20200902212217852

    image-20200902212322219

    3.win32com操作word

    3.1 打开新的word文档并添加内容

    示例代码:

    import win32com
    from win32com.client import Dispatch, constants
    import os
    
    # 创建新的word文档
    def funOpenNewFile():
        word = Dispatch('Word.Application')
        # 或者使用下面的方法,使用启动独立的进程:
        # word = DispatchEx('Word.Application')
    
        # 如果不声明以下属性,运行的时候会显示的打开word
        word.Visible = 1  # 0:后台运行 1:前台运行(可见)
        word.DisplayAlerts = 0  # 不显示,不警告
    
        # 创建新的word文档
        doc = word.Documents.Add()
    
        # 在文档开头添加内容
        myRange1 = doc.Range(0, 0)
        myRange1.InsertBefore('Hello word\n')
    
        # 在文档末尾添加内容
        myRange2 = doc.Range()
        myRange2.InsertAfter('Bye word\n')
    
        # 在文档i指定位置添加内容
        i = 0
        myRange3 = doc.Range(0, i)
        myRange3.InsertAfter("what's up, bro?\n")
    
        # doc.Save()  # 保存
        doc.SaveAs(os.getcwd() + "\\funOpenNewFile.docx")  # 另存为
        doc.Close()  # 关闭 word 文档
        word.Quit()  # 关闭 office
    
    
    if __name__ == '__main__':
    
        print("当前文件路径名:",os.getcwd())
    
        print("调用funOpenNewFile()")
        funOpenNewFile()
    

    效果如下:

    image-20200902215532171

    3.2 打开已存在word文档并添加内容

    前提条件:

    image-20200902215705868

    示例代码:

    import win32com
    from win32com.client import Dispatch, constants
    import os
    
    # 打开已存在的word文件
    def funOpenExistFile():
        word = Dispatch('Word.Application')
        # 或者使用下面的方法,使用启动独立的进程:
        # word = DispatchEx('Word.Application')
    
        # 如果不声明以下属性,运行的时候会显示的打开word
        word.Visible = 1  # 0:后台运行 1:前台运行(可见)
        word.DisplayAlerts = 0  # 不显示,不警告
    
        doc = word.Documents.Open(os.getcwd() + "\\3.1 win32com测试.docx") # 打开一个已有的word文档
    
        # 在文档开头添加内容
        myRange1 = doc.Range(0, 0)
        myRange1.InsertBefore('Hello word\n')
    
        # 在文档末尾添加内容
        myRange2 = doc.Range()
        myRange2.InsertAfter('Bye word\n')
    
        # 在文档i指定位置添加内容
        i = 0
        myRange3 = doc.Range(0, i)
        myRange3.InsertAfter("what's up, bro?\n")
    
        # doc.Save()  # 保存
        doc.SaveAs(os.getcwd() + "\\funOpenExistFile.docx")  # 另存为
        doc.Close()  # 关闭 word 文档
        word.Quit()  # 关闭 office
    
    if __name__ == '__main__':
        print("当前文件路径名:",os.getcwd())
    
        print("调用funOpenExistFile()")
        funOpenExistFile()
    

    效果如下:

    image-20200902215734538

    3.3 转换word为pdf

    示例代码:

    import win32com
    from win32com.client import Dispatch, constants
    import os
    
    # 生成Pdf文件
    def funGeneratePDF():
        word = Dispatch("Word.Application")
        word.Visible = 0  # 后台运行,不显示
        word.DisplayAlerts = 0  # 不警告
        doc = word.Documents.Open(os.getcwd() + "\\3.3 win32com转换word为pdf等格式.docx") # 打开一个已有的word文档
        doc.SaveAs(os.getcwd() + "\\3.3 win32com转换word为pdf等格式.pdf", 17)  # txt=4, html=10, docx=16, pdf=17
        doc.Close()
        word.Quit()
    
    if __name__ == '__main__':
        funGeneratePDF()
    

    效果如下:

    image-20200902220545789

    4.Python-docx操作word

    官方文档:(最权威指南,没有之一)

    https://python-docx.readthedocs.io/en/latest/

    4.1 Python-docx官方例程

    前提条件:

    image-20200903082229387

    示例代码:

    from docx import Document
    from docx.shared import Inches
    
    document = Document()
    
    document.add_heading('Document Title', 0)
    
    p = document.add_paragraph('A plain paragraph having some ')
    p.add_run('bold').bold = True
    p.add_run(' and some ')
    p.add_run('italic.').italic = True
    
    document.add_heading('Heading, level 1', level=1)
    document.add_paragraph('Intense quote', style='Intense Quote')
    
    document.add_paragraph(
        'first item in unordered list', style='List Bullet'
    )
    document.add_paragraph(
        'first item in ordered list', style='List Number'
    )
    
    document.add_picture('countrygarden.png', width=Inches(1.25))
    
    records = (
        (3, '101', 'Spam'),
        (7, '422', 'Eggs'),
        (4, '631', 'Spam, spam, eggs, and spam')
    )
    
    table = document.add_table(rows=1, cols=3)
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = 'Qty'
    hdr_cells[1].text = 'Id'
    hdr_cells[2].text = 'Desc'
    for qty, id, desc in records:
        row_cells = table.add_row().cells
        row_cells[0].text = str(qty)
        row_cells[1].text = id
        row_cells[2].text = desc
    
    document.add_page_break()
    
    document.save('4.1 Python-docx官方例程.docx')
    

    最终效果:

    image-20200903082407282

    image-20200903082734956

    image-20200903082917109

    4.2 Python-docx官方例程解析

    carbon (3)

    image-20200903083515641

    • 导入库操作
    from docx import Document
    
    • 导入英寸单位操作(可用于指定图片大小、表格宽高等)
    from docx.shared import Inches
    
    • 新建一个文档
    document = Document()
    
    • 加载旧文档(用于修改或添加内容)
    document = Document('exist.docx')
    
    • 添加标题段落
    document.add_heading('Document Title', 0)
    

    image-20200903083552698

    • 添加段落操作

    段落在 Word 中是基本内容。它们用于正文文本,也用于标题和项目列表(如项目符号)。

    p = document.add_paragraph('A plain paragraph having some ')
    
    • 在指定段落上添加内容
    p.add_run('bold').bold = True			# 添加粗体文字
    p.add_run(' and some ')					# 添加默认格式文字
    p.add_run('italic.').italic = True		# 添加斜体文字
    

    image-20200903084834299

    • 添加标题操作

    等级1-9 也就是标题1-标题9,我们可以在旧文档中将标题格式设置好,使用Python-docx打开旧文档,再添加相应等级标题即可。

    document.add_heading('Heading, level 1', level=1)
    

    image-20200903090142065

    • 添加指定样式段落

    样式详情:

    https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html#understanding-styles

    document.add_paragraph('Intense quote', style='Intense Quote')
    
    # 以下两句的含义等同于上面一句
    p = document.add_paragraph('Intense quote')
    p.style = 'Intense Quote'
    
    • 添加无序列表操作
    document.add_paragraph( 'first item in unordered list', style='List Bullet')
    
    • 添加有序列表操作
    document.add_paragraph( 'first item in ordered list', style='List Number')
    

    image-20200903085026784

    • 添加图片操作

    第一个参数为图片路径,需要正确无误

    第二个参数为图片大小,单位英寸

    document.add_picture('countrygarden.png', width=Inches(1.25))
    

    image-20200903085339147

    • 新建表格操作
    table = document.add_table(rows=1, cols=3)
    
    • 填充标题行操作
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = 'Qty'
    hdr_cells[1].text = 'Id'
    hdr_cells[2].text = 'Desc'
    
    • 为每组内容添加数据行并填充
    for qty, id, desc in records:
        row_cells = table.add_row().cells
        row_cells[0].text = str(qty)
        row_cells[1].text = id
        row_cells[2].text = desc
    
    • 设置标题样式操作
    table.style = 'LightShading-Accent1'
    

    image-20200903085653474

    • 添加分页符操作
    document.add_page_break()
    
    • 保存当前文档操作
    document.save('4.1 Python-docx官方例程.docx')
    

    4.3 Python-docx 表格样式设置

    表格样式设置代码:

    from docx import *
    document = Document()
    
    table = document.add_table(3, 3, style="Medium Grid 1 Accent 1")
    heading_cells = table.rows[0].cells
    heading_cells[0].text = '第一列内容'
    heading_cells[1].text = '第二列内容'
    heading_cells[2].text = '第三列内容'
    
    document.save("demo.docx")
    

    效果:

    遍历所有样式:

    from docx.enum.style import WD_STYLE_TYPE
    from docx import Document
    
    document = Document()
    styles = document.styles
    
    # 生成所有表样式
    for s in styles:
        if s.type == WD_STYLE_TYPE.TABLE:
            document.add_paragraph("表格样式 :  " + s.name)
            table = document.add_table(3, 3, style=s)
            heading_cells = table.rows[0].cells
            heading_cells[0].text = '第一列内容'
            heading_cells[1].text = '第二列内容'
            heading_cells[2].text = '第三列内容'
            document.add_paragraph("\n")
    
    document.save('4.3 所有表格样式.docx')
    

    效果如下(大家按照喜欢的样式添加即可):

    image-20200903091928639

    image-20200903091943254

    5.小实战:docx&matplotlib自动生成数据分析报告

    5.1 最终效果

    image-20200903102706608

    5.2 数据获取

    我们这里使用xlrd作为数据获取所使用的库,简单回顾一下:

    import xlrd
    
    xlsx = xlrd.open_workbook('./3_1 xlrd 读取 操作练习.xlsx')
    
    # 通过sheet名查找:xlsx.sheet_by_name("sheet1")
    # 通过索引查找:xlsx.sheet_by_index(3)
    table = xlsx.sheet_by_index(0)
    
    # 获取单个表格值 (2,1)表示获取第3行第2列单元格的值
    value = table.cell_value(2, 1)
    print("第3行2列值为",value)
    
    # 获取表格行数
    nrows = table.nrows
    print("表格一共有",nrows,"行")
    
    # 获取第4列所有值(列表生成式)
    name_list = [str(table.cell_value(i, 3)) for i in range(1, nrows)]
    print("第4列所有的值:",name_list)
    

    表格内容:

    image-20200903092926657

    编写数据获取代码:

    我们这里只获取用户姓名和,分数,并将它们保存到列表中,看代码。

    # 获取学习成绩信息
    def GetExcelInfo():
        print("开始获取表格内容信息")
    
        # 打开指定文档
        xlsx = xlrd.open_workbook('学生成绩表格.xlsx')
    
        # 获取sheet
        sheet = xlsx.sheet_by_index(0)
    
        # 获取表格行数
        nrows = sheet.nrows
        print("一共 ",nrows," 行数据")
    
        # 获取第2列,和第4列 所有值(列表生成式),从第2行开始获取
        nameList = [str(sheet.cell_value(i, 1)) for i in range(1, nrows)]
        scoreList = [int(sheet.cell_value(i, 3)) for i in range(1, nrows)]
    
        # 返回名字列表和分数列表
        return nameList,scoreList
    

    获取结果:

    image-20200903103039286

    5.3 柱状图生成

    我们先将获取的姓名和成绩使用 字典 数据结构关联起来,再对其排序:

    # 将名字和分数列表合并成字典(将学生姓名和分数关联起来)
    scoreDictionary = dict(zip(nameList, scoreList))
    print("dictionary:",scoreDictionary)
    
    # 对字典进行值排序,高分在前,reverse=True 代表降序排列
    scoreOrder = sorted(scoreDictionary.items(), key=lambda x: x[1], reverse=True)
    print("scoreOrder",scoreOrder)
    

    效果如下:

    # 合成的字典
    dictionary: {'Dillon Miller': 41, 'Laura Robinson': 48, 'Gabrilla Rogers': 28, 'Carlos Chen': 54, 'Leonard Humphrey': 44, 'John Hall': 63, 'Miranda Nelson': 74, 'Jessica Morgan': 34, 'April Lawrence': 67, 'Cindy Brown': 52, 'Cassandra Fernan': 29, 'April Crawford': 91, 'Jennifer Arias': 61, 'Philip Walsh': 58, 'Christina Hill P': 14, 'Justin Dunlap': 56, 'Brian Lynch': 84, 'Michael Brown': 68}
    
    # 排序后,再次转换成列表
    scoreOrder [('April Crawford', 91), ('Brian Lynch', 84), ('Miranda Nelson', 74), ('Michael Brown', 68), ('April Lawrence', 67), ('John Hall', 63), ('Jennifer Arias', 61), ('Philip Walsh', 58), ('Justin Dunlap', 56), ('Carlos Chen', 54), ('Cindy Brown', 52), ('Laura Robinson', 48), ('Leonard Humphrey', 44), ('Dillon Miller', 41), ('Jessica Morgan', 34), ('Cassandra Fernan', 29), ('Gabrilla Rogers', 28), ('Christina Hill P', 14)]
    

    image-20200903103334104

    使用 matplotlib 生成柱状图:

    # 生成学生成绩柱状图(使用matplotlib)
    # 会生成一张名为"studentScore.jpg"的图片
    def GenerateScorePic(scoreList):
        # 解析成绩列表,生成横纵坐标列表
        xNameList = [str(studentInfo[0]) for studentInfo in scoreList]
        yScoreList = [int(studentInfo[1]) for studentInfo in scoreList]
        print("xNameList",xNameList)
        print("yScoreList",yScoreList)
    
        # 设置字体格式
        matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
    
        # 设置绘图尺寸
        plt.figure(figsize=(10,5))
    
        # 绘制图像
        plt.bar(x=xNameList, height=yScoreList, label='学生成绩', color='steelblue', alpha=0.8)
    
        # 在柱状图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式
        for x1, yy in scoreList:
            plt.text(x1, yy + 1, str(yy), ha='center', va='bottom', fontsize=16, rotation=0)
    
        # 设置标题
        plt.title("学生成绩柱状图")
    
        # 为两条坐标轴设置名称
        plt.xlabel("学生姓名")
        plt.ylabel("学生成绩")
    
        # 显示图例
        plt.legend()
    
        # 坐标轴旋转
        plt.xticks(rotation=90)
    
        # 设置底部比例,防止横坐标显示不全
        plt.gcf().subplots_adjust(bottom=0.25)
    
        # 保存为图片
        plt.savefig("studentScore.jpg")
    
        # 直接显示
        plt.show()
    

    效果如下:

    image-20200903103518644

    5.4 生成最终报告

    代码如下:

    # 开始生成报告
    def GenerateScoreReport(scoreOrder,picPath):
        # 新建一个文档
        document = Document()
    
        # 设置标题
        document.add_heading('数据分析报告', 0)
    
        # 添加第一名的信息
        p1 = document.add_paragraph("分数排在第一的学生姓名为: ")
        p1.add_run(scoreOrder[0][0]).bold = True
        p1.add_run(" 分数为: ")
        p1.add_run(str(scoreOrder[0][1])).italic = True
    
        # 添加总体情况信息
        p2 = document.add_paragraph("共有: ")
        p2.add_run(str(len(scoreOrder))).bold = True
        p2.add_run(" 名学生参加了考试,学生考试的总体情况: ")
    
        # 添加考试情况表格
        table = document.add_table(rows=1, cols=2)
        table.style = 'Medium Grid 1 Accent 1'
        hdr_cells = table.rows[0].cells
        hdr_cells[0].text = '学生姓名'
        hdr_cells[1].text = '学生分数'
        for studentName,studentScore in scoreOrder:
            row_cells = table.add_row().cells
            row_cells[0].text = studentName
            row_cells[1].text = str(studentScore)
    
        # 添加学生成绩柱状图
        document.add_picture(picPath, width=Inches(6))
    
        document.save('学生成绩报告.docx')
    

    image-20200903103652078

    5.5 完整代码

    import xlrd
    import matplotlib
    import matplotlib.pyplot as plt
    from docx import Document
    from docx.shared import Inches
    
    # 获取学习成绩信息
    def GetExcelInfo():
        print("开始获取表格内容信息")
    
        # 打开指定文档
        xlsx = xlrd.open_workbook('学生成绩表格.xlsx')
    
        # 获取sheet
        sheet = xlsx.sheet_by_index(0)
    
        # 获取表格行数
        nrows = sheet.nrows
        print("一共 ",nrows," 行数据")
    
        # 获取第2列,和第4列 所有值(列表生成式),从第2行开始获取
        nameList = [str(sheet.cell_value(i, 1)) for i in range(1, nrows)]
        scoreList = [int(sheet.cell_value(i, 3)) for i in range(1, nrows)]
    
        # 返回名字列表和分数列表
        return nameList,scoreList
    
    # 生成学生成绩柱状图(使用matplotlib)
    # 会生成一张名为"studentScore.jpg"的图片
    def GenerateScorePic(scoreList):
        # 解析成绩列表,生成横纵坐标列表
        xNameList = [str(studentInfo[0]) for studentInfo in scoreList]
        yScoreList = [int(studentInfo[1]) for studentInfo in scoreList]
        print("xNameList",xNameList)
        print("yScoreList",yScoreList)
    
        # 设置字体格式
        matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
    
        # 设置绘图尺寸
        plt.figure(figsize=(10,5))
    
        # 绘制图像
        plt.bar(x=xNameList, height=yScoreList, label='学生成绩', color='steelblue', alpha=0.8)
    
        # 在柱状图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式
        for x1, yy in scoreList:
            plt.text(x1, yy + 1, str(yy), ha='center', va='bottom', fontsize=16, rotation=0)
    
        # 设置标题
        plt.title("学生成绩柱状图")
    
        # 为两条坐标轴设置名称
        plt.xlabel("学生姓名")
        plt.ylabel("学生成绩")
    
        # 显示图例
        plt.legend()
    
        # 坐标轴旋转
        plt.xticks(rotation=90)
    
        # 设置底部比例,防止横坐标显示不全
        plt.gcf().subplots_adjust(bottom=0.25)
    
        # 保存为图片
        plt.savefig("studentScore.jpg")
    
        # 直接显示
        plt.show()
    
    # 开始生成报告
    def GenerateScoreReport(scoreOrder,picPath):
        # 新建一个文档
        document = Document()
    
        # 设置标题
        document.add_heading('数据分析报告', 0)
    
        # 添加第一名的信息
        p1 = document.add_paragraph("分数排在第一的学生姓名为: ")
        p1.add_run(scoreOrder[0][0]).bold = True
        p1.add_run(" 分数为: ")
        p1.add_run(str(scoreOrder[0][1])).italic = True
    
        # 添加总体情况信息
        p2 = document.add_paragraph("共有: ")
        p2.add_run(str(len(scoreOrder))).bold = True
        p2.add_run(" 名学生参加了考试,学生考试的总体情况: ")
    
        # 添加考试情况表格
        table = document.add_table(rows=1, cols=2)
        table.style = 'Medium Grid 1 Accent 1'
        hdr_cells = table.rows[0].cells
        hdr_cells[0].text = '学生姓名'
        hdr_cells[1].text = '学生分数'
        for studentName,studentScore in scoreOrder:
            row_cells = table.add_row().cells
            row_cells[0].text = studentName
            row_cells[1].text = str(studentScore)
    
        # 添加学生成绩柱状图
        document.add_picture(picPath, width=Inches(6))
    
        document.save('学生成绩报告.docx')
    
    if __name__ == "__main__":
        # 调用信息获取方法,获取用户信息
        nameList,scoreList = GetExcelInfo()
        # print("nameList:",nameList)
        # print("ScoreList:",scoreList)
    
        # 将名字和分数列表合并成字典(将学生姓名和分数关联起来)
        scoreDictionary = dict(zip(nameList, scoreList))
        # print("dictionary:",scoreDictionary)
    
        # 对字典进行值排序,高分在前,reverse=True 代表降序排列
        scoreOrder = sorted(scoreDictionary.items(), key=lambda x: x[1], reverse=True)
        # print("scoreOrder",scoreOrder)
    
        # 将进行排序后的学生成绩列表生成柱状图
        GenerateScorePic(scoreOrder)
    
        # 开始生成报告
        picPath = "studentScore.jpg"
        GenerateScoreReport(scoreOrder,picPath)
    
        print("任务完成,报表生成完毕!")
    

    6.Python-docx修改旧word文档

    6.1 回顾:打开旧文档,并另存为新文档

    我们这里就拿上一节生成的学生成绩报告作为示例:

    from docx import Document
    
    if __name__ == "__main__":
        document = Document('6 学生成绩报告.docx')
    
        # 在这里进行操作,此处忽略
    
        document.save('修改后的报告.docx')
    

    6.2 读取word文档的内容

    示例代码:

    from docx import Document
    
    
    if __name__ == "__main__":
        document = Document('6 学生成绩报告.docx')
    
        # 读取 word 中所有内容
        for p in document.paragraphs:
            print("paragraphs:",p.text)
    
        # 读取 word 中所有一级标题
        for p in document.paragraphs:
            if p.style.name == 'Heading 1':
                print("Heading 1:",p.text)
    
        # 读取 word 中所有二级标题
        for p in document.paragraphs:
            if p.style.name == 'Heading 2':
                print("Heading 2:", p.text)
    
        # 读取 word 中所有正文
        for p in document.paragraphs:
            if p.style.name == 'Normal':
                print("Normal:", p.text)
    
        document.save('修改后的报告.docx')
    

    效果如下:

    image-20200903105253809

    image-20200903105224074

    6.3 读取docx中表格内容

    示例代码:

    from docx import Document
    
    
    if __name__ == "__main__":
        document = Document('6 学生成绩报告.docx')
    
        # 读取表格内容
        for tb in document.tables:
            for i,row in enumerate(tb.rows):
                for j,cell in enumerate(row.cells):
                    text = ''
                    for p in cell.paragraphs:
                        text += p.text
                    
                    print(f'第{i}行,第{j}列的内容{text}')
    
        document.save('修改后的报告.docx')
    

    效果如下:

    image-20200903105602081

    6.4 修改word中的内容

    示例代码:

    from docx import Document
    
    if __name__ == "__main__":
        document = Document('6 学生成绩报告.docx')
    
        # 修改 word 中所有内容
        for p in document.paragraphs:
            p.text = "修改后的段落内容"
    
        # 修改表格内容
        for tb in document.tables:
            for i,row in enumerate(tb.rows):
                for j,cell in enumerate(row.cells):
                    text = ''
                    for p in cell.paragraphs:
                        p.text = ("第",str(i),"行",str(j),"列")
    
                    print(f'第{i}行,第{j}列的内容{text}')
    
        document.save('6.4 修改后的报告.docx')
    

    效果如下:

    image-20200903110026337

    7.小实战:docx-mailmerge自动生成万份劳动合同

    7.1 创建 合同 模板

    1. 添加内容框架

    image-20200903110701537

    1. 创建一个域

    image-20200903110833123

    1. 设置域名

    image-20200903110932178

    image-20200903110958145

    1. 依次全部添加

    image-20200903111155809

    7.2 生成1份证明

    示例代码:

    from mailmerge import MailMerge
    
    template = '薪资证明模板.docx'
    
    document = MailMerge(template)
    
    document.merge(name = '唐星',
                   id = '1010101010',
                   year = '2020',
                   salary = '99999',
                   job = '嵌入式软件开发工程师')
    
    document.write('生成的1份证明.docx')
    

    效果如下:

    image-20200903111618373

    哈哈哈哈!!月入10万,走向人生巅峰~

    7.3 生成10000份证明

    示例代码:

    from mailmerge import MailMerge
    from datetime import datetime
    
    # 生成单份合同
    def GenerateCertify(templateName,newName):
        # 打开模板
        document = MailMerge(templateName)
    
        # 替换内容
        document.merge(name='唐星',
                       id='1010101010',
                       year='2020',
                       salary='99999',
                       job='嵌入式软件开发工程师')
    
        # 保存文件
        document.write(newName)
    
    if __name__ == "__main__":
        templateName = '薪资证明模板.docx'
    
        # 获得开始时间
        startTime = datetime.now()
    
        # 开始生成
        for i in range(10000):
            newName = f'./10000份证明/薪资证明{i}.docx'
            GenerateCertify(templateName,newName)
    
        # 获取结束时间
        endTime = datetime.now()
    
        # 计算时间差
        allSeconds = (endTime - startTime).seconds
        print("生成10000份合同一共用时: ",str(allSeconds)," 秒")
    
        print("程序结束!")
    

    效果如下:

    image-20200903112856381

    image-20200903112922131

    只花了89秒,平均不到 0.01 就能生成一个!!快

    image-20200903112818386

    展开全文
  • word2vec模型对文档进行自动分类

    千次阅读 2018-09-26 21:47:19
    # 把预测相关的逻辑封装在一个类中,使用这个类的实例来对新文档进行分类预测 class Predictor ( object ) : def __init__ ( self , w2v_model_file , lr_model_file ) : self . w2v = Word2Vec . ...
  • 打开文档。 快捷键Alt + F11打开VBA编辑器,选择菜单“插入->模块” 粘贴代码 Option Explicit Sub SplitEveryFivePagesAsDocuments() Dim oSrcDoc As Document, oNewDoc As Document Dim strSrcName As ...
  • word2vec——高效word特征

    万次阅读 2015-06-07 16:07:36
    继上次分享了经典统计语言模型,最近公众号中有很多做NLP朋友问到了关于word2vec的相关内容, 本文就在这里整理一下做以分享。 本文分为 概括word2vec 相关工作 模型结构 Count-based方法 vs. Directly predict 几...
  • 整个word生成过程是如何运转的?  我在本项目中采用这个技术架构确定之后,开始考虑采用properties文件来定义相关的标签什么的,但是最后放弃了这个决定,采用了XML文件的形式,主要的原因是:XML文件能很好的表现...
  • 我们可以用比较简单的在线PDF转换成Word转换器来提取PDF文档内容。  以迅捷在线PDF转换成Word转换器为例,该软件是目前网络排名最好的站点,平均每小时点击率超过百人,是很多网友比较钟爱的转换工具,其实
  • 1、 java导出word的5种方式 https://blog.csdn.net/zi_wu_xian/article/details/80320520 2、jfreechart形成各种图 https://blog.csdn.net/chehec2010/article/details/81026789 3、jFreeChart 详细属性总结...
  • 最近准备开始收集写论文的参考资料,导师推荐了一些可以参考的期刊文献,然而都是英文的,看起来真的是太艰难了。...因为主要是想翻译整个文档,就测试了这些软件的文档翻译功能,下面说说自己的感受...
  • 我们可以用比较简单的pdf转换成word转换器在线转换来提取PDF文档内容。  以迅捷在线PDF转换成Word转换器为例,该软件是目前网络排名最好的站点,平均每小时点击率超过百人,是很多网友比较钟爱的转换工具,
  • 一、通过词向量进行文档相似度判定的背景与意义  随着人类对自身秘密的探索与研究的不断深入,以生物技术为基石的人工智能技术也在快速的发展。通过对自身的神经以及思维的研究,人们创造出人工智能,来使在各个...
  • Domino 和 Word 的集成 陈 斌, 软件工程师 , IBM 陈斌是来自 IBM CSTL 的高级软件开发工程师,现在负责 Lotus Domino for IBM i 的开发、支持以及团队领导工作。 陈 云, 软件工程师, IBM 陈云是来自 I
  • 问题出现:写一份实验报告,里面插了太多图,手机拍示波器的图片,平均一张2.5M,算下来文件就会很大 首先转换为PDF格式 再进行PDF压缩 PDF再转换为word 图片基本清晰,这也避免了一张一张图片压缩的烦扰 .....
  • 不是所有的表格都会用到Excel来制作的,一些简单的表格,我们都会用Word文档来制作,但是缺陷也是非常的明显,Word毕竟没有Excel处理数据那样强大的功能。不过在运用一些简单的公式求和、平均值、积等还是可以搞定...
  • 朴素贝叶斯文档分类实验

    千次阅读 2016-07-28 17:14:04
    根据朴素贝叶斯(Naive Bayes)算法,对以下混在一起十个分类的文档集合进行分类。
  • 命令更新之sum2docx:将描述性统计输出至Word文档 原创爬虫俱乐部Stata and Python数据分析2019-05-20 本文作者:孙雪丽 文字编辑:张语盈 技术总编:薛 原 好消息!!!爬虫俱乐部将于2019年7月5日至7月8日...
  • DL4J中文文档/语言处理/Word2Vec

    千次阅读 2018-11-01 18:54:41
    Word2Vec, Doc2vec &amp; GloVe: 用于自然语言处理的神经词嵌入 内容 介绍 神经词嵌入 有趣的Word2Vec结果  给我代码 Word2Vec 剖析 安装,加载与训练 代码示例 问题排查与Word2Vec调试 Word2Vec用例...
  • Kusner)等人在2015年提出了Word Mover’s Distance(WMD)[1],其中将词嵌入技术用于计算两个文档之间的距离。 使用给定的预训练单词嵌入,可以通过计算“一个文档的嵌入单词需要“移动”以到达另一文档的嵌入单词...
  • 词向量求平均合成句向量

    千次阅读 2018-07-21 19:32:23
    list=word_vec[word]+list #向量对应值相加 print(list) print(count) except: continue print(count) if count !=0: list=list/count print(list) list=list.tolist() # 变回List容易增加项 和 SVM...
  • 0. 在桌面新建此名文件夹,输入cmd: 新建一个word2vec_test.ipynb: 此时文件夹
  • ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类 目录 输出结果 实现代码 输出结果 先看文档分类后的结果,一共得到五类电影: 实现代码 # -*- coding: utf-8 -...
  • 四、求和求平均得到文档向量 对每一篇文章的词向量进行求和,然后除以词数量,得到文档向量(维度为50的向量)。 其中70%划分到train_set,30%划分到test 利用numpy里面的sum函数对列求和 a =np. sum (ce...
  • 深度学习-文档分类

    千次阅读 2016-12-16 19:37:55
    ParagraphVectors模型,每篇文档映射在一个唯一的向量上,由矩阵中的一列表示,每个word则类似的被映射到向量上,这个向量由另一个矩阵的列表示。使用连接方式获得新word的预测,可以说 ParagraphVectors是在word2...
  • 本部分的工作主要是用代码去实现Word2Vec算法,调用的kears包,关于这部分的原理,希望读者自行了解。 数据集及环境安装见文章一 此次代码所用到的环境安装方式也同上 import pandas as pd # Read data from files ...
  • 大型文档的编辑过程

    2017-04-20 13:54:17
    在进行大型项目文档编写过程中,在缺少在线协作文档...为了减少文档编写过程中的返工和修改,按照以下几个步骤进行,往往会提高工作效率:1、设定word的模板板和样式,制定各级标题的文字大小和样式,段落符号格式以
  • Python:用Word2Vec 和 sklearn 对IMDB评论进行分类训练之前一直做的是目标跟踪上的东西,这几天在看这本书又看到NLP,两者均作为对数据序列的处理,应该是有共通点的,于是就简单摸索了一下。在NLP建立由词到向量的...
  • spark Word2Vec+LSH相似文本推荐(scala)

    千次阅读 热门讨论 2018-09-15 19:50:22
    本篇博客在上一篇博客的基础上,介绍如何根据关键词获取文档的相似度,进行相似文本的推荐。在这里我们需要使用到两个算法:Word2Vec与LSH。 其中Word2Vec即将词转换为词向量,这样词之间的关系就可以向量距...
  • word2vec和word embedding有什么区别?

    千次阅读 2017-12-18 11:26:29
    作者:Scofield链接:...很好,正好可借此机会介绍词向量、word2vec以及DeepNLP整套相关的东西:文章很长,是从CSDN上写好复制过来的,亦可直接跳到博客观看:深度学习(Deep Learning)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,131
精华内容 7,252
关键字:

word文档求平均分