精华内容
下载资源
问答
  • LaTeX 插入表格

    万次阅读 多人点赞 2020-10-24 11:42:58
    本文介绍了如何LaTeX文档插入表格,并且详细介绍了如何自定义表格中的各个模块,例如宽度、颜色等。

    原  文:在 LaTeX 中插入表格
    译  者:Xovee
    翻译时间:2020-1024

    在 LaTeX 中插入表格

    在科研论文中,表格是最重要的内容之一。LaTeX 提供了许多定制化表格的功能,包括调整表格大小,合并单元格,改变表格颜色等等。

    介绍

    下面的代码展示了一个简单的表格:

    \begin{center}
    \begin{tabular}{ c c c }
     cell1 & cell2 & cell3 \\ 
     cell4 & cell5 & cell6 \\  
     cell7 & cell8 & cell9    
    \end{tabular}
    \end{center}
    

    在这里插入图片描述

    tabular环境是LaTeX默认创建表格的环境。你需要对这个环境手动指定一个参数。{c c c}参数告诉LaTeX,表格将会有三列,每一列都是居中对齐(c: center)。

    在Overleaf中打开这个例子

    在 Overleaf 中创建一个简单的表格

    你可以在 tabular环境中放置分割线:

    \begin{center}
    \begin{tabular}{ |c|c|c| } 
     \hline
     cell1 & cell2 & cell3 \\ 
     cell4 & cell5 & cell6 \\ 
     cell7 & cell8 & cell9 \\ 
     \hline
    \end{tabular}
    \end{center}
    

    在这里插入图片描述

    下面介绍tabular环境中一些重要的参数。

    { |c|c|c| }
    这个参数设定了表格中有三列,列旁都有一个竖直的分割线。每一个c都代表这一列中的内容是居中对齐的,你也可以使用r来向右对齐,或者l来向左对齐。

    \hline
    这个参数会在表格中插入水平的分割线。你可以多次使用这个命令。

    cell1 & cell2 & cell3 \\
    &符号分割了单元格之间的内容。\\代表着一行的结束。

    下面展示另外一个例子。

    \begin{center}
     \begin{tabular}{||c c c c||} 
     \hline
     Col1 & Col2 & Col2 & Col3 \\ [0.5ex] 
     \hline\hline
     1 & 6 & 87837 & 787 \\ 
     \hline
     2 & 7 & 78 & 5415 \\
     \hline
     3 & 545 & 778 & 7507 \\
     \hline
     4 & 545 & 18744 & 7560 \\
     \hline
     5 & 88 & 788 & 6344 \\ [1ex] 
     \hline
    \end{tabular}
    \end{center}
    

    在这里插入图片描述

    在这个例子里,表格中插入了一些双层的线。你可以利用这些线来让表格的内容显示的更加有条理。

    在Overleaf中打开这个例子

    固定长度的表格

    在设计表格的时候,你也许想要每一列或者整个表格的长度是固定的。下面的例子介绍了如何设定表格的长度。

    \begin{center}
    \begin{tabular}{ | m{5em} | m{1cm}| m{1cm} | } 
    \hline
    cell1 dummy text dummy text dummy text& cell2 & cell3 \\ 
    \hline
    cell1 dummy text dummy text dummy text & cell5 & cell6 \\ 
    \hline
    cell7 & cell8 & cell9 \\ 
    \hline
    \end{tabular}
    \end{center}
    

    在这里插入图片描述
    首先,你需要引入array包:

    \usepackage{array}
    

    tabular环境中,m{5em}参数对表格中的第一列设定了5em的长度(另外两列的长度是1cm),并且设定了单元格中的内容是水平对齐的。在这里,m代表middle,p代表top,b代表bottom。在标准的表格中,每一行必须手动插入。使用这个参数可以让单元格中的内容自动调整、换行,来满足所设定的固定长度。

    如果你不需要控制每一个单元格的宽度,而是想设定整个表格的宽度,并且均等地设定空间,你可以使用tabularx包。请参考下面的例子:

    \begin{tabularx}{0.8\textwidth} { 
      | >{\raggedright\arraybackslash}X 
      | >{\centering\arraybackslash}X 
      | >{\raggedleft\arraybackslash}X | }
     \hline
     item 11 & item 12 & item 13 \\
     \hline
     item 21  & item 22  & item 23  \\
    \hline
    \end{tabularx}
    

    在这里插入图片描述
    tabularx环境与tabular环境相似,但是更灵活。在这个例子里,表格的宽度被设定为文字宽度的0.8倍。你还可以使用其他的LaTeX单位

    大括号中的参数(\raggedright\arraybackslash等),设定了每一列的对齐方式:第一列向左对齐,第二列居中对齐,第三列向右对齐。

    在 Overleaf 中的打开这个例子

    合并行和列

    你可以合并行和列来生成更大的单元格。下面的例子介绍了如何使用\multicolumn命令来合并列。

    \begin{tabular}{ |p{3cm}||p{3cm}|p{3cm}|p{3cm}|  }
     \hline
     \multicolumn{4}{|c|}{Country List} \\
     \hline
     Country Name     or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 Code&ISO numeric Code\\
     \hline
     Afghanistan   & AF    &AFG&   004\\
     Aland Islands&   AX  & ALA   &248\\
     Albania &AL & ALB&  008\\
     Algeria    &DZ & DZA&  012\\
     American Samoa&   AS  & ASM&016\\
     Andorra& AD  & AND   &020\\
     Angola& AO  & AGO&024\\
     \hline
    \end{tabular}
    

    在这里插入图片描述

    下面我们介绍这个命令中的各个参数。

    {4}
    需要合并的列的数量。

    {|c|}
    这个列会居中对齐(c),并且列两旁有两条竖直的分割线。

    {Country List}
    单元格中展示的内容。

    如果你想合并行,你首先需要引入multirow包,然后你可以使用multirow命令。

    \begin{center}
    \begin{tabular}{ |c|c|c|c| } 
    \hline
    col1 & col2 & col3 \\
    \hline
    \multirow{3}{4em}{Multiple row} & cell2 & cell3 \\ 
    & cell5 & cell6 \\ 
    & cell8 & cell9 \\ 
    \hline
    \end{tabular}
    \end{center}
    

    在这里插入图片描述
    这个命令接受三个参数。第一个是需要合并的行数。第二个参数是行的宽度。第三个参数是单元格的内容

    在 Overleaf 中打开这个例子

    跨越多页的表格

    如果你要插入一个非常长的表格,单个页面无法放的下这个表格,那么你可以引入longtable包来让表格跨越多个页面。使用longtable命令:

    \documentclass{article}
    \usepackage[utf8]{inputenc}
    \usepackage{longtable}
    
    \begin{document}
     
     \begin{longtable}[c]{| c | c |}
     \caption{Long table caption.\label{long}}\\
    
     \hline
     \multicolumn{2}{| c |}{Begin of Table}\\
     \hline
     Something & something else\\
     \hline
     \endfirsthead
    
     \hline
     \multicolumn{2}{|c|}{Continuation of Table \ref{long}}\\
     \hline
     Something & something else\\
     \hline
     \endhead
    
     \hline
     \endfoot
    
     \hline
     \multicolumn{2}{| c |}{End of Table}\\
     \hline\hline
     \endlastfoot
    
     Lots of lines & like this\\
     Lots of lines & like this\\
     Lots of lines & like this\\
     Lots of lines & like this\\
     Lots of lines & like this\\
     Lots of lines & like this\\
     Lots of lines & like this\\
     Lots of lines & like this\\
     ...
     Lots of lines & like this\\
     \end{longtable}
    

    在这里插入图片描述
    longtable的用法和tabular相似。下面介绍长表格的四个关键元素:

    \endfirsthead
    这个命令之前的内容会出现在第一页中表格的头部。

    \endhead
    这个命令之前,endfirsthead命令之后的内容,会出现在除了第一页的其他页中,表格的头部。

    \endfoot
    endhead相似。在这个命令之前,\endhead之后,内容会出现在除了最后一页的其他页中,表格的底部。

    \endlastfoot
    endfirsthead相似。在这个命令之前,\endfoot命令之后的内容,会仅出现在最后一页表格的底部。

    在 Overleaf 中打开这个例子

    表格的位置

    设定表格的位置非常简单。表格是处于table环境之中的。

    \begin{table}[h!]
    \centering
     \begin{tabular}{||c c c c||} 
     \hline
     Col1 & Col2 & Col2 & Col3 \\ [0.5ex] 
     \hline\hline
     1 & 6 & 87837 & 787 \\ 
     2 & 7 & 78 & 5415 \\
     3 & 545 & 778 & 7507 \\
     4 & 545 & 18744 & 7560 \\
     5 & 88 & 788 & 6344 \\ [1ex] 
     \hline
     \end{tabular}
    \end{table}
    

    在这里插入图片描述
    在这个例子中,h!参数代表着表格的位置是必须这里,它覆盖了LaTeX表格的默认设定。其他可能的位置参数包括:

    h
    大约出现在这里(here)。

    t
    出现在页面的顶部(top)。

    b
    出现在页面的底部(bottom)。

    p
    将表格放置在一个专门放置表格的特殊页面。

    !
    覆盖LaTeX内部的参数。

    H
    将表格精确地放置在其出现的位置,一般等价于h!

    更多例子请见这篇文章

    在上面的例子中我们还使用了下面两个命令:

    \centering
    这个命令使表格在容器中居中。

    [1ex]
    这个命令在行中的单元格内添加了额外的空间。

    在 Overleaf 中打开这个例子

    表题、标签、引用

    表格可以拥有表题、标签,也可以在文中被引用。

    The table \ref{table:1} is an example of referenced \LaTeX elements.
    
    \begin{table}[h!]
    \centering
    \begin{tabular}{||c c c c||} 
     \hline
     Col1 & Col2 & Col2 & Col3 \\ [0.5ex] 
     \hline\hline
     1 & 6 & 87837 & 787 \\ 
     2 & 7 & 78 & 5415 \\
     3 & 545 & 778 & 7507 \\
     4 & 545 & 18744 & 7560 \\
     5 & 88 & 788 & 6344 \\ [1ex] 
     \hline
    \end{tabular}
    \caption{Table to test captions and labels}
    \label{table:1}
    \end{table}
    

    在这里插入图片描述
    这个例子中介绍了三个重要的命令:

    \caption{Table to test captions and labels}
    显然,这个命令设定了表格的标题。你可以将标题放置在表格的上方,或者下方。

    \label{table:1}
    如果你需要在文档中引用表格,你需要给表格设定一个标签。标签会对表格进行编号。下面的命令可以让你引用标签。

    \ref{table:1}
    这个命令在文档中会变成表格的编号。

    注意:你需要对文档编译两次来让标签正常的显示。

    在 Overleaf 中打开这个例子

    表格列表

    创建一个表格的列表非常简单:

    \documentclass{article}
    \usepackage[utf8]{inputenc}
    
    \begin{document}
    
    \listoftables
    
    ...
    \end{document}
    

    在这里插入图片描述
    表格的标题会被用来生成这个列表。如果你使用了babel包,标题“List of Tables"会被相应地替换为对应的语言。更多信息请参考这篇文章

    在 Overleaf 中打开这个例子

    改变表格的外表

    你可以自定义表格的外表,来让它更加好看。下面我们将介绍如何更改表格中线的粗细、线的颜色、单元格的背景色等。

    线的宽度、单元格的填充

    你可以增加表格中列之间的间距、行的间距,来让表格的可读性更强。

    \documentclass{article}
    \usepackage[utf8]{inputenc}
    
    \setlength{\arrayrulewidth}{1mm}
    \setlength{\tabcolsep}{18pt}
    \renewcommand{\arraystretch}{1.5}
    
    \begin{document}
    \begin{tabular}{ |p{3cm}|p{3cm}|p{3cm}|  }
    \hline
    \multicolumn{3}{|c|}{Country List} \\
    \hline
    Country Name     or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\
    \hline
    Afghanistan & AF &AFG \\
    Aland Islands & AX   & ALA \\
    Albania &AL & ALB \\
    Algeria    &DZ & DZA \\
    American Samoa & AS & ASM \\
    Andorra & AD & AND   \\
    Angola & AO & AGO \\
    \hline
    \end{tabular}
    \end{document}
    

    在这里插入图片描述

    \setlength{\arrayrulewidth}{1mm}
    这个命令设定了表格边界的宽度。例子中使用的宽度是1mm,你也可以设定其他的宽度。

    \setlength{\tabcolsep}{18pt}
    单元格的边界和单元格中的文字的距离被设置为18pt。你也可以设置其他的距离。

    \renewcommand{\arraystretch}{1.5}
    行高被设定为默认的1.5倍。

    在 Overleaf 中打开这个例子

    交替对行着色

    在表格中,人们经常使用两种颜色来对不同的行进行交替着色,来增强表格的可读性。你可以使用xcolor包。

    \documentclass{article}
    \usepackage[table]{xcolor}
    
    \setlength{\arrayrulewidth}{1mm}
    \setlength{\tabcolsep}{18pt}
    \renewcommand{\arraystretch}{2.5}
    
    {\rowcolors{3}{green!80!yellow!50}{green!70!yellow!40}
    \begin{tabular}{ |p{3cm}|p{3cm}|p{3cm}|  }
    \hline
    \multicolumn{3}{|c|}{Country List} \\
    \hline
    Country Name     or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\
    \hline
    Afghanistan & AF &AFG \\
    Aland Islands & AX   & ALA \\
    Albania &AL & ALB \\
    Algeria    &DZ & DZA \\
    American Samoa & AS & ASM \\
    Andorra & AD & AND   \\
    Angola & AO & AGO \\
    \hline
    \end{tabular}
    }
    

    在这里插入图片描述

    注意命令右边大括号中的参数。

    \rowcolors{3}{green!80!yellow!50}{green!70!yellow!40}
    

    命令\rowcolors接收三个参数:

    • 开始着色的行
    • 奇数行的颜色
    • 偶数行的颜色

    参考xcolor包的官方文档(见文末链接),其中介绍了可用的颜色,以及如何创建自定义的颜色。在这个例子中,不同比例的绿色和黄色混合起来。

    为了让上面的命令正常工作,记得在文档的序言部分使用下面的命令:

    \usepackage[table]{xcolor}
    

    在 Overleaf 中打开这个例子

    对表格着色(单元格、行、列)

    表格中的所有元素都可以被着色。你必须引入xcolor包。
    下面介绍一个例子:

    \documentclass{article}
    \usepackage[utf8]{inputenc}
    \usepackage[table]{xcolor}
    
    \setlength{\arrayrulewidth}{1mm}
    \setlength{\tabcolsep}{18pt}
    \renewcommand{\arraystretch}{2.5}
    
    \newcolumntype{s}{>{\columncolor[HTML]{AAACED}} p{3cm}}
    
    \arrayrulecolor[HTML]{DB5800}
    
    \begin{tabular}{ |s|p{3cm}|p{3cm}|  }
    \hline
    \rowcolor{lightgray} \multicolumn{3}{|c|}{Country List} \\
    \hline
    Country Name    or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\
    \hline
    Afghanistan & AF &AFG \\
    \rowcolor{gray}
    Aland Islands & AX & ALA \\
    Albania   &AL & ALB \\
    Algeria  &DZ & DZA \\
    American Samoa & AS & ASM \\
    Andorra & AD & \cellcolor[HTML]{AA0044} AND    \\
    Angola & AO & AGO \\
    \hline
    \end{tabular}
    

    在这里插入图片描述
    下面介绍如何更改表格中不同模块的颜色:

    • 线的颜色。使用\arrayrulecolor命令。在这个例子中,我们使用了一种HTML格式,你也可以使用其他可用的格式(参见xcolor的官方文档,见文末链接)。
    • 单元格的背景色。使用\cellcolor命令。你可以直接输入颜色的名字(红色、灰色、绿色等),你也可以使用其他的格式(例如HTML)。
    • 行的背景色。使用\rowcolor命令。
    • 列的背景色。这个有一点麻烦。使用下面的命令来定义一种新的列类型:
    \newcolumntype{s}{>{\columncolor[HTML]{AAACED}} p{3cm}}
    

    这个命令定义了一种新的列,叫做s,对齐方式是p,宽度是3cm,颜色是AAACED(HTML格式)。这个新的列类型可以在tabular环境中使用。

    在 Overleaf 中打开这个例子

    参考指南

    tabular环境中参数

    你可以使用tabular环境来创建表格。

    \begin{tabular}[pos]{cols}
     table content
    \end{tabular}
    

    它的参数包括:

    • pos:垂直位置。包含下面三种可选值:
      t:顶部的线与文本的baseline对齐
      b:底部的线与文本的baseline对齐
      c或none:文本的baseline直接与表格居中对齐

    • cols:定义了每一列边界的对齐方式。包含下面几种可选值:
      l:左对齐的列
      c:居中对齐的列
      r:右对齐的列
      p{'width'}:段落列中的文字顶部水平对齐
      m{'width'}:段落列中的文字中间水平对齐
      b{'width'}:段落列中的文字底部水平对齐
      |:垂直线
      ||:双垂直线
      *{num}{form}:格式重复 num 次;例如*{3}{|l}等价于|l|l|l|

    • 新的行、单元格之间的间隔,使用下面命令:
      &:列之间的分割符
      \\:开始一个新行(行后的额外距离可以这样指定:\\[6pt]
      \hline:水平线
      newline:在段落列中的单元格中开始一个新行
      \cline{i-j}:局部添加水平线,开始于第i列,终止于第j列

    延伸阅读

    展开全文
  • 如何MySQL中输入中文

    千次阅读 2019-08-05 00:03:00
    MySQL中输入中文:MySQL建标的时候,直接往表的varchar(255)中输入中文的话是会报错的,大概是因为数据库的默认编码是latin1而不是utf8. MySQL查询代码:show variables like'%char%';  输出的结果只要将...

    解决MySQL中的Incorrect string value

     

    MySQL中输入中文:在MySQL建标的时候,直接往表中的varchar(255)中输入中文的话是会报错的,大概是因为数据库的默认编码是latin1而不是utf8.

     

    MySQL查询代码:show variables like'%char%';

        输出的结果只要将其中的Latin改成utf8就可以了

     

    在创建数据库的时候修改默认编码为utf8:create database abcd DEFAULT CHARACTER SET utf8;

     

    创建好表以后可以直接用:show create database databasename;(databasename是你创建数据库的名字)来查看结果,之后要是在创建新表的话,就可以直接输入中文了。

     

    已经创建了的数据库和表:

        如果不想创建新的数据库,可以只修改表的属性

        查看表的列属性:show full columns from tablename;

        修改:       

    1 alter table tablename change columnsname columnsnamee varchar(255) 
    2 character set utf8 collate utf8_unicode_ci not null default ''; 

     

        tablename是表名称,columnsname是列名称(这里要输入两个列名称,也就是就列名和新的列名,一般情况下不修改列名,然后输入上述代码,查看修改后的属性就可以了,但是这样只能修改一个表的编码形式,其他的还是Latinl的编码形式,还是要继续修改的,而且在修改的时候要保证表是一个空表,没有数据)

     

     

    为什么Latinl不能输入中文:

        在Latinl中每个字符只有一个字节,而在utf8中一个字符可以是多个字节组成,所以utf8具有比Latinl更多的字符。

     

    转载于:https://www.cnblogs.com/tulintao/p/11300662.html

    展开全文
  • 六、取得表格指定名称列的全部数据 下面的代码,可以实现对表格整列数据的提取,也可以仿造此原理实现整行数据的提取。 列名称需要第一行,支持使用列名字母或是首行标题名引用列。 函数代码 Public Function ...

    表格操作系列

    六、取得表格指定名称列的全部数据

    下面的代码,可以实现对表格整列数据的提取,也可以仿造此原理实现整行数据的提取。
    列名称需要在第一行,支持使用列名字母或是首行标题名引用列。

    函数代码

    Public Function GetColumnByFie(Fie As String, Optional sh As String = "当前表") As Variant
    '取得某一列的数据
    Dim col As String
    'On Error GoTo err
    If sh = "当前表" Or sh = "" Then sh = ActiveSheet.Name
    With Sheets(sh)
        If Fie Like "[a-zA-Z]" Then
            col = Fie
        Else
            col = Chr(.Range("1:1").Find(Fie).Column + 64)
        End If
        Set GetColumnByFie = .Range(col & "2:" & col & .Range(col & "65536").End(xlUp).Row)
    End With
    Exit Function
    err:
    GetColumnByFie = False
    End Function
    

    表格操作系列未完,待续!

    ——专注办公软件的二次开发及培训,你有问题,我有思路!
    ——微博、微信、CSDN同号:w_dexu
    ——转载请注明出处!

    微信二维码扫码加微信

    展开全文
  • 将Excel表格数据转为word的指定位置 想要的结果是excel的一行数据,转换为一个word,并且更改为指定的位置。 首先使用的excel和word 是xlsx和docx格式的哦,其他格式的请自行修改哦。 我们使用Maven进行jar包的管理...

    将Excel表格数据转为word的指定位置

    想要的结果是excel的一行数据,转换为一个word,并且更改为指定的位置。

    首先使用的excel和word 是xlsx和docx格式的哦,其他格式的请自行修改哦。
    我们使用Maven进行jar包的管理,
    使用了两个poi的jar poi-ooxml,poi-scratchpad

            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.9</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>3.17</version>
            </dependency>
    

    首先先看excel的格式,
    在这里插入图片描述

    第一行是需要的数据的名称,从第二行开始就是需要的数据了。

    首先在代码中指定excel地址以及实用的word模板是不现实的我们使用config.properties进行配置

    //模板位置
    fileSrc=D:\\MyProject\\008.docx
    //生成word文件夹
    fileDest=D:\\MyProject\\
    //excel位置
    excelSrc=D:\\MyProject\\007.xlsx
    //Excel表名字
    SheetName=Sheet1
    

    并且在项目中将数据读取出来。

       /**
         * 读取配置文件
         *
         * @return
         */
        private Properties readP() {
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties");
            Properties p = new Properties();
            try {
                p.load(inputStream);
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return p;
        }
    
    

    在java中读取需要数据的excel文档

     public static void main(String[] args) throws Exception{
            Excel_Tool excel_tool=new Excel_Tool();
            Properties p = excel_tool.readP();// 配置文件读取的参数
            String fielName = p.getProperty("excelSrc");
            String sheetName =  p.getProperty("SheetName");
    
    
           // readExcelData(fielName,sheetName,2,2);
            readExcelData(fielName,sheetName,p);
        }
    
    public static void readExcelData(String fielName,String sheetName,Properties p) throws Exception{
    
            InputStream in = new FileInputStream(fielName);
            workbook = new XSSFWorkbook(in);
            sheet = workbook.getSheet(sheetName);
            //row = sheet.getRow(0);
            //一行总共的列数。
            int columnNum = sheet.getRow(0).getLastCellNum()
                    - sheet.getRow(0).getFirstCellNum();
            //总共的行数
            int rowNum=sheet.getLastRowNum();
            ArrayList columnList=new ArrayList();
            row =sheet.getRow(0);
            for (int i = 0; i <columnNum ; i++) {
                cell=row.getCell(i);
                String column=getCell(cell);
    			
                columnList.add(column);
                //判断需要哪一列数据,将所有的列名都保存在list中
            }
            getData(columnList,rowNum,p);
        }
    
       public static String getData(ArrayList arrayList,int rowNum,Properties p){
                //添加需要的列的名称
                int bmdmc_col=arrayList.indexOf("bmdmc");
                int xm_col=arrayList.indexOf("xm");
                int ksbh_col=arrayList.indexOf("ksbh");
                int xb_col=arrayList.indexOf("xb");
                for (int j = 0; j <rowNum ; j++) {
                    Student student=new Student();
                    XSSFRow row=sheet.getRow(j+1);
                    XSSFCell cell=row.getCell(bmdmc_col);
                    String result=getCell(cell);
                    student.setBmdmc(result);
    
    
                    cell=row.getCell(xm_col);
                    result=getCell(cell);
                    student.setName(result);
    
                    cell=row.getCell(ksbh_col);
                    result=getCell(cell);
                    student.setKsbh(result);
    
                    cell=row.getCell(xb_col);
                    result=getCell(cell);
                    student.setXb(result);
                    //将excel数据写入word
                    Word_Tool.updateWord(student,p);
                }
            return null;
        }
    

    上面方法我写死了属性名,其实可以利用配置文件将属性名循环查询以及循环调出。后期再进行更改,先利用index获取了bmdmc,xm等等列名的位置,然后获取每一行这一列的数据。

      public static String getCell(XSSFCell cell){
            String result="";
            switch (cell.getCellType()){
                case XSSFCell.CELL_TYPE_NUMERIC:
                    result=String.valueOf(cell.getNumericCellValue());
                    break;
                case XSSFCell.CELL_TYPE_STRING:
                    result=cell.getStringCellValue();
                    break;
                default:
                    result=cell.getStringCellValue();
                    break;
            }
            return result;
        }
    

    上面是返回excel每一个单元格的数据方法。
    然后将这些数据保存在对象里面,excel中的数据我们就获取完毕了。然后我们要将这些数据写入到word的指定位置中。

     public static void updateWord(Student student,Properties p){
            Word_Tool test = new Word_Tool();
            Map<String, Object> param = new HashMap<String, Object>();
            List<String> keyList = new ArrayList<String>();
            List<Object> valueList = new ArrayList<Object>();
    
            // 获取配置文件所有键值对
    
            Iterator<Object> iterator = p.keySet().iterator();
            while (iterator.hasNext()) {
                keyList.add(iterator.next().toString());
            }
            Iterator<Object> iterator2 = p.keySet().iterator();
            while (iterator2.hasNext()) {
                valueList.add(p.getProperty(iterator2.next().toString()));
            }
            for (int i = 0; i < keyList.size(); i++) {
                System.out.println(keyList.get(i) + ":" + valueList.get(i));
                param.put(keyList.get(i), valueList.get(i));
            }
            // 替换文档关键字
            WordUtil.generateWord(param, param.get("fileSrc").toString(), param.get("fileDest").toString(),student);
        }
    

    这里的键值对以及fileSrc,fileDest都是配置文件中的属性,

    //模板位置
    fileSrc=D:\\MyProject\\008.docx
    //生成word文件夹
    fileDest=D:\\MyProject\\
    //excel位置
    excelSrc=D:\\MyProject\\007.xlsx
    //Excel表名字
    SheetName=Sheet1
    //
    
    //对应Student的属性名-自己添加
    {{s.ksbh}}=Ksbh
    {{s.xm}}=Name
    {{s.xb}}=Xb
    {{s.bydw}}=Bydw
    

    这就要提出我们再word中指定位置的地方就是你需要用excel文件数据更改的地方了。
    在这里插入图片描述
    就像这样。可以知道word中数据的位置。
    下来首先我们要将这个word模板复制一下,生成一个新的word,每个student一个word。

     public static void generateWord(Map<String, Object> param, String fileSrc, String fileDest, Student student) {
            XWPFDocument doc = null;
            OPCPackage pack = null;
            String fileName = "" + student.getName();
            fileName += ".docx";
            FileOutputStream out = null;
    
            try {
                out = new FileOutputStream(fileDest + fileName, true);
                WordUtil.fileCopy(fileSrc,fileDest + fileName);
                pack = POIXMLDocument.openPackage(fileDest + fileName);
                doc = new XWPFDocument(pack);
                if (param != null && param.size() > 0) {
                    // 处理段落
                    List<XWPFParagraph> paragraphList = doc.getParagraphs();
                    processParagraphs(paragraphList, param, doc,student);
                    //处理表格
                    List<XWPFTable> tablesList=doc.getTables();
                    processTables(tablesList, param, doc,student);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            try {
    
    
                doc.write(out);
    
                pack.close();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                closeStream(out);
            }
        }
    

    word中有两个需要处理一个是段落,一个是表格,一般我们的数据都会放在这两个类别中。

     /**
         * 处理段落,替换关键字
         *
         * @param paragraphList
         * @throws FileNotFoundException
         * @throws InvalidFormatException
         */
        public static void processParagraphs(List<XWPFParagraph> paragraphList, Map<String, Object> param, XWPFDocument doc,Student student)
                throws InvalidFormatException, FileNotFoundException {
            if (paragraphList != null && paragraphList.size() > 0) {
                // 遍历所有段落
                for (XWPFParagraph paragraph : paragraphList) {
                    List<XWPFRun> runs = paragraph.getRuns();
                    for (XWPFRun run : runs) {
                        String text = run.getText(0);
                        // System.out.println("text==" + text);
                        if (text != null) {
                            boolean isSetText = false;
                            for (Entry<String, Object> entry : param.entrySet()) {
                                String key = entry.getKey();
                                if (text.indexOf(key) != -1) {// 在配置文件中有这个关键字对应的键
                                    isSetText = true;
                                    Object value = entry.getValue();
                                    if (value instanceof String) {// 文本替换
                                        // System.out.println("key==" + key);
                                        if (text.contains(key)) {
                                            text = text.replace(key, value.toString());
                                        }
                                    }
                                }
                            }
                            if (isSetText) {
                                run.setText(text, 0);
                            }
                        }
                    }
                }
            }
        }
    
        public static void processTables(List<XWPFTable> tablesList, Map<String, Object> param, XWPFDocument doc,Student student)
                throws InvalidFormatException, FileNotFoundException {
            if (tablesList != null && tablesList.size() > 0) {
                // 遍历所有表格
                List<XWPFTableRow> rows;
                List<XWPFTableCell> cells;
                for (XWPFTable table : tablesList) {
                    CTTblPr pr = table.getCTTbl().getTblPr(); // 获取表格对应的行
                    rows = table.getRows();
                    for (XWPFTableRow row : rows) { // 获取行对应的单元格
                        cells = row.getTableCells();
                        for (XWPFTableCell cell : cells) {
                            System.out.println(cell.getText());
                            String text=cell.getText();
                            if (text != null) {
                                boolean isSetText = false;
                                for (Entry<String, Object> entry : param.entrySet()) {
                                    String key = entry.getKey();
                                    if (text.indexOf(key) != -1) {// 在配置文件中有这个关键字对应的键
                                        isSetText = true;
                                        Object value = entry.getValue();
                                        //根据属性名反射属性值
                                        value=getGetMethod(student,value.toString());
                                        if (value instanceof String) {// 文本替换
                                            // System.out.println("key==" + key);
                                            if (text.contains(key)) {
                                                text =  value.toString();
                                            }
                                        }
                                    }
                                }
                                if (isSetText) {
                                    cell.removeParagraph(0);
                                    cell.setText(text);
                                }
                            }
                        }
                    }
                }
            }
        }
    
    

    上面是直接从配置文件中拿属性值进行填写,下面表格则是使用配置文件获取这个对象word的位置对应的student的属性名,根据反射获取student对象中的数据。将数据进行修改。

    //反射数据
        public static Object getGetMethod(Object ob , String name){
            try {
                Method[] m = ob.getClass().getMethods();
                for(int i = 0;i < m.length;i++){
                    if(("get"+name).toLowerCase().equals(m[i].getName().toLowerCase())){
                        return m[i].invoke(ob);
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
    
            return null;
        }
    
        //复制文档
    
    
        public static void fileCopy(String source, String target) throws IOException {
            try (InputStream in = new FileInputStream(source)) {
                try (OutputStream out = new FileOutputStream(target)) {
                    byte[] buffer = new byte[4096];
                    int bytesToRead;
                    while((bytesToRead = in.read(buffer)) != -1) {
                        out.write(buffer, 0, bytesToRead);
                    }
                    out.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    

    好了,现在我们就能将excel中的数据写入到word中了,而且每个excel一行对应一个word文件。
    在这里插入图片描述
    这个是生成的文件。里面的内容已经更改了。
    在这里插入图片描述
    好了 完工~

    展开全文
  • “写入电子表格文件”位于函数选板的“编程→文件I/O→写入电子表格文件”,图标和接线端如图1所示。  图1 写入电子表格文件图标和接线端  输入和输出接线端说明如下。  format(%3f):格式(%3f),...
  • 案例思想是源于前两天帮读者做了一个 demo ,需求大致将一上百个 word 中表格内容提取出来(所有word 中表格样式一样),把提取到的内容自动存入 Excel word 中表格形式如下 目前含有数个上面形式的 word 文档需要...
  • 一个表格拆分二个表格Often, you need to split the content of a cell in your spreadsheet that is separated by a comma or space, such as the first and last names of a contact. Luckily, Google Sheets ...
  • 近期有经常使用的数据,需要登陆到某个网站,将其中的表格数据读取出来,为了提高效率节省工作时间,决定写一个程序,使用Python自动登陆到该网站然后将某日(参数)的数据读取并存放于excel表格中。1登陆网站通过IE...
  • python—beautifulSoup提取网页数据写入指定的Excel表格 文章目录python—beautifulSoup提取网页数据写入指定的Excel表格1.前言2.实现步骤3.结果如下: 1.前言 任务需求:测试的报告是HTML格式,我需要把报告...
  • 效果 代码 <template> <div class="app-container"> ...div style="margin-top:20px">...el-input v-model="tableDataName" placeholder="请输入姓名" style="width:240px"/> <e...
  • element表格加输入框

    千次阅读 2020-11-24 10:00:49
    <el-table :data="PersonList" style="width: 100%"> <el-table-column label="员工姓名" pro
  • Excel中用内置序列功能快速输入员工姓名(转) 我们制作公司的相关表格时,经常要输入员工的姓名,一个一个地输入(特别是有些生僻字),太麻烦了,可以将他们制作成内置序列,然后用“填充柄”来拖拉输入: 先将员工...
  • //如果传入的数据长度小于1的话,直接在表格提示没有数据 var non='<tr rowspan="3"class="text-center"><td colspan="'+paramsLen+'" style="color: #9e9e9e57;">什么都没有</td></tr>' $(table_id+" tbody:last...
  • 1.tabel标签绑定 :cell-style="cellStyle" 2.methods定义cellStyle方法 cellStyle(row, column, rowIndex, columnIndex) { if (row.column.label == "事件告警信息" || row.column.l...
  • 介绍HTML中表格、列表和表单的基本用法
  • 各位前辈们,小弟刚开始学习python,我现在想通过python(我使用的是python2.7)先查找该Excel指定名称,再获取该名称对应的数学或者语文成绩,该怎么做呢? ![图片说明]...
  • python读取excel表格,并将读取的输入写入到新的excel表格中遇到的从excel读取日期时变为浮点数的解决办法新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的...
  • HTML中表格标签及其属性

    千次阅读 2020-12-09 10:38:15
    1、表格标签 1.1、表格的主要作用 表格主要用于显示数据、展示... 标签用于定义表格中的行,必须嵌套<table> <td></td> 用于定义表格中的单元格,必须嵌套<tr></tr>标签 字母t
  • 表格中包括行和列,HTML中表格中只能是行包括列。建议使用表格之前先吧列跟行都先算清楚再开始写想要的内容 。 其中的属性有很多: 属性名 描述 border 设置表格的外边框线的大小 (单位:像素) ...
  • 输入框中输入 ID 号,点击“查询”超链接,表格将过滤出指定 ID 号的数据 点击每行对应的“删除”超链接,将删除对应行的数据 点击每行对应的“修改”超链接,ID、姓名和薪水变为可编辑状态,“修改”超链接...
  • 输入框中输入相应的字符,下方搜索列表呈现相应的数据 如图: 二.思路 1.可以通过监控有关列表的数据的变化,即通过输入的字段操作列表数据数组 ----可通过计算属性直接监控数组数据----computed 2.返回的必定是...
  • pyqt5表格内添加控件

    千次阅读 2020-07-13 18:04:21
    一、创建一个表格 from PyQt5.QtWidgets import * from PyQt5.QtGui import * import sys class Example(QWidget): def __init__(self): super().__init__() hhbox = QHBoxLayout() #横向布局 ...
  • 利用“WPS表格”软件我们可以更方便更快捷地制作工作需要的表格在表格中写入相关数据,本文为大家介绍下怎么制作表格指定表格的大小。本例以宽2cm高1cm为例制作表格,其他需求参考此例即可。 描述:WPS表格大小...
  • WEB入门二 表格和表单

    千次阅读 2017-02-14 13:57:51
    学习内容Ø 表格的作用和制作Ø 表单的制作能力目标Ø 掌握表格的创建Ø 掌握设置表格的常用属性;Ø 理解表单的作用Ø 熟练掌握表单常用元素本章简介表格对于网页制作而言极其重要,其最明显的优点是能够以...
  • 使用MATLAB读取指定文件夹全部指定格式的文件 以csv格式为例(其他另外类型文件类似),读取文件所有.csv文件,并将需要使用到的数据转存到一个矩阵。 clc;clear; % 清空之前所有的变量、输入及绘图 close all...
  • 简介   本文将展示一个稍微不一样点的爬虫。   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,...  我们的日常生活和工作,PDF文件无疑是最常用的文件格式之一,小到教材、课件,大到...
  • C#导出数据到Excel表格

    万次阅读 2019-04-28 08:17:47
    有些数据的使用不可能仅仅限制于本个项目,还需要外部使用,当需要外部使用数据时,就要对数据进行提取,其中一个提取的方式就是把数据导出到Excel表格。 JS部分 JS部分的代码很少,就是一个询问提示框然后...
  • 由于需求,需要将一些txt文本指定字符提取出来,并以表格形式保存。 突然想到我学过一点python,由于数据量较多,写个脚本处理明显会效率更高。 于是花了一个晚上的时间更改文件后缀名为txt,并将文件的部分...
  • HTML表格、长表格、表单

    千次阅读 2019-07-02 10:39:48
    表格在日常生活使用的非常的多,比如excel就是专门用来创建表格的工具,表格就是用来表示一些格式化的数据的,比如:课程表、银行对账单网页也可以来创建出不同的表格HTML,使用table标签来创建一个...
  • Java 获取表格中某一个单元格的值

    千次阅读 2018-06-27 14:43:00
    搜索页面返回表格样搜索结果, 获取搜索结果某个单元格的具体值. 以下图为例, 下表是搜索返回的结果, 第一行是各个列的名字, 其它是具体的返回值. 方法1: 根据用户输入的表头名来确定是第几列, 再根据用户...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,132
精华内容 26,452
关键字:

如何在表格中指定输入名字