精华内容
下载资源
问答
  • 合并Word 表格中单元格
    2020-12-11 04:03:25

    //合并Word 表格中单元格

    procedure mergeWordCell;

    var WordApp: TWordApplication;

    WordDoc: TWordDocument;

    DocInx,oFileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,

    PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat: OleVariant;

    i,iRow,iCol:integer;

    myCell:Cell;

    myRow:Row;

    begin

    memo1.Lines.Clear ;

    //===== 创建对象 =====

    if not Assigned(WordApp) then

    begin

    WordApp:= TWordApplication.Create(nil);

    WordApp.Visible := false;

    end;

    if not Assigned(WordDoc) then

    WordDoc:= TWordDocument.Create(nil);

    try

    DocInx:=1;

    oFileName := d:\test.doc;

    oReadOnly:=true;

    CfCversions := EmptyParam;

    AddToRctFiles:= EmptyParam;

    PswDocument:= EmptyParam;

    PswTemplate:= EmptyParam;

    oRevert:= EmptyParam;

    WPswDocument:= EmptyParam;

    WPswTemplate:= EmptyParam;

    oFormat:= EmptyParam;

    // ===== 打开文件 ===== 

    WordApp.Documents.open(oFileName,CfCversions,oReadOnly,AddToRctFiles,

    PswDocument,PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat);

    // ===== 关联文件 =====

    WordDoc.ConnectTo(WordApp.Documents.Item(DocInx));

    //合并第一、二列

    iStart:=WordDoc.Tables.Item(i).Cell(1,1).Range.Start;

    myCol:= WordDoc.Tables.Item(i).Columns.Item(2);

    iEnd:=myCol.Cells.Item(myCol.Cells.Count).Range.End_;

    myRange:=WordDoc.Range;

    myRange.Start:=iStart;

    myRange.End_ :=iEnd;

    myRange.Cells.Merge;

    finally

    if Assigned(WordDoc) then     // ===== 关闭文件 =====

    begin

    WordDoc.Close;

    WordDoc.Disconnect;

    WordDoc.Destroy;

    WordDoc := nil;

    end;

    if Assigned(WordApp) then

    // ===== 关闭Word =====

    begin

    WordApp.Quit;

    WordApp.Disconnect;

    WordApp.Destroy;

    WordApp := nil;

    end;

    end;

    end;

    更多相关内容
  • 问题描述python中用docx库读取word文件,若word文件中包含合并表格表格则通过docx读取显示:file = docx.Document(path)for table in file.tables:for row in table.rows:for cell in row.cells:print(cell.text)...

    问题描述

    python中用docx库读取word文件,若word文件中包含合并的表格表格

    6ccaf37513c941dc79ccc1be40e4204f.png

    则通过docx读取显示:

    file = docx.Document(path)

    for table in file.tables:

    for row in table.rows:

    for cell in row.cells:

    print(cell.text)

    结果为:

    1-1

    1-1

    1-3

    1-4

    2-1

    2-2

    2-3

    2-4

    3-1

    3-1

    3-3

    2-4

    3-1

    3-1

    4-3

    4-3

    合并的单元格会重复显示,如1-1会显示两次;

    如果在循环中改变cell.text内容,则保存后会重复显示

    for table in file.tables:

    for row in table.rows:

    for cell in row.cells:

    cell.text = cell.text + 'test'

    file.save(path2)

    622861cacbd1eb9b3fc5bb41a5be8ced.png

    解决方案

    打印cell发现合并的单元格虽然重复但公用内存地址:

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    ,

    所以,可先判断cell是否重复再修改cell.text,

    代码:

    cell_set = []

    for table in file.tables:

    for row in table.rows:

    for cell in row.cells:

    if cell not in cell_set:

    cell_set.append(cell)

    cell.text = cell.text + 'test'

    执行结果:

    141dd55368815bfc07226afde144fa26.png

    展开全文
  • 工作中正好接到个小项目需要将Excel数据导出组成word表格合并所有表格成一个word文档,这个流程涉及到Excel的解析、Word文档的数据插入,多个Word文档的合并,对Word文档插入图片等,在尝试构写脚本时发现百度谷歌...

    工作中正好接到个小项目需要将Excel数据导出组成word表格并合并所有表格成一个word文档,这个流程涉及到Excel的解析、Word文档的数据插入,多个Word文档的合并,对Word文档插入图片等,在尝试构写脚本时发现百度谷歌的资料多有缺失或者干脆就是过时的方法,于是写下这篇文章将自己在构写这个脚本时遇到的坑写一下。

    首先是解析Excel数据,Python的xlrd框架可以快速地帮助我们完成这一部分操作:

    import xlrd

    //获取Excel文档

    workbook = xlrd.open_workbook(u'2019名单.xls')

    //我们可以通过两种不同的方式获取Excel文档中对应的表单

    sheet = workbook.sheets()[0]

    sheet = getSheetByName("表单名字",workbook)

    //通过xlrd的接口获得表单的行数及列数

    nrow = sheet.nrows

    ncol = sheet.ncols

    for i in range(1,nrow):

    //cells代表的是Excel表单的每一行,即一个单元格组

    cells = sheet.row(i)

    //得到单元格组我们便可执行下一步的插入Word文档操作了

    insertCellsToWord(cells)

    需要明白的是,最好不要在Python脚本中对Word文档的效果进行再定义,原因之一是因为脚本并不全能,如果在脚本中对文档效果进行再定义,代码会变得臃肿且难以维护,例如先通过脚本生成表单效果再对单元格进行修改效果等等,这些操作最好先自行创建Word文档进行定义,即,通过Python脚本获取预先定义好的Word文档进行插入数据的操作。

    譬如,我们有如下一张Word文档。

    我们需要填充的数据都在这个表单里,通过预先确定的唯一标示符(即图中的英文单词)将Excel中的数据插入到对应的单元格中。

    //python-docx是Python较为常用的操控Word文档的工具框架

    from docx import Document

    def insertCellsToWord(cells):

    //获取预先设置的模板

    test = Document("XXXX模板.docx")

    for t in test.tables:

    for row in t.rows:

    //遍历到单元格进行数据插入

    for cell in row.cells:

    try:

    set_cell(cell,cells)

    except Exception as e:

    print(cells)

    print(e)

    test_number = str(cells[0].value)

    //生成新模板

    test.save(output_path + "普通/" + test_number + ".docx")

    def set_cell(cell,cells):

    //找到对应的单元格进行数据插入

    if cell.text == "school":

    cell.text = cells[13].value

    需要注意的是,当你如此完成了插入数据的操作并预览输出的Word文档时,你会发现,输出的文档并没有按照你预先调制的展示效果展示,例如单元格中的文字居中,加粗,字体修改等等,通过python-docx的操作会丢失这部分数据,cell.text = cells[13].value的操作并不会继承效果,因此我们需要通过python-docx再次对单元格效果进行设置。

    from docx.enum.text import WD_ALIGN_PARAGRAPH

    from docx.shared import Pt

    if cell.text == "school":

    cell.text = cells[13].value

    p = cell.paragraphs[0]

    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER

    r = p.runs[0]

    r.bold = True

    f = r.font

    f.size = Pt(12)

    通过单元格的paragraphs属性及runs属性进行样式设置,在此,我设置了单元格居中,文字加粗以及字体大小设置为12,你可以在python-docx的官方文档找到更多可参考的样式属性。

    接下来开始进行Word文档合并。

    在合并之前需要说明的是,我们常常会遇到表单中需要插入图片的需求,比如每张表格都有一个一寸照之类的,但在我构写这个脚本的踩坑中发现,图片并不能在合并文档之前插入(也可能是我没找到正确的方式),当先插入图片再进行合并时,导出的合并文件必然是损坏的,而导出没有图片的纯文本合并文件却不会损坏,因此,我通过在第一次对单元格的文本设置中对标注插入图片的单元格替换唯一标示符(例如上图中的Icon变为Icon+“对应的人员编号”),然后在合并文件之后再次遍历单元格插入图片,理所应当的,这样会导致脚本的效率大大降低,如果有更好的方式希望不吝赐教。

    normal_path = output_path + "普通/"

    //获取本地所有待合并文档

    files = os.listdir(normal_path)

    files.sort()

    normal_merge_docx = ""

    for index, filename in enumerate(files):

    if index == 0:

    normal_merge_docx = Document(normal_path + filename)

    continue

    sub_doc = Document(normal_path + filename)

    for el in sub_doc.element.body:

    normal_merge_docx.element.body.append(el)

    normal_merge_docx.save("normal_merge_docx.docx")

    可能会有人问,为什么要获取第一个待合并文件对接下来的文档进行合并而不是新建一个Word文档,对所有的待合并文件进行合并呢?

    原因在于,新建的Word文档并不包含一些高于表格的样式数据,如果使用新建文档对所有待合并文档合并,则预览输出文件会发现合并Word文档的样式错误,所以必须取一个待合并文档作为基类来合并其他文档,这样才保证不会样式丢失。

    接着进行图片插入:

    from docx.shared import Inches

    //因为我需要插入的图片位置是确定的,所以我直接设置入参去取对应的单元格插入图片,增加效率。

    def insertImage(filename,row,col):

    output = Document(filename)

    for t in output.tables:

    cell = t.cell(row,col)

    if "-" in cell.text:

    print(cell.text)

    arr = cell.text.split("-")

    cell.text = ""

    p = cell.paragraphs[0]

    r = p.runs[0]

    pathstr = ""

    //getImage通过具体的标识符去取本地图片,若本地图片有问题则通过dealImg对图片处理再行插入

    try:

    pathstr = getImg(arr[0], arr[1])

    except Exception as e:

    print(e)

    pathstr = dealImg(getImg(arr[0], arr[1]), arr[1])

    r.add_picture(pathstr, width=Inches(0.84), height=Inches(1.2))

    p.alignment = WD_ALIGN_PARAGRAPH.CENTER

    需要注意的是,python-docx的文档告诉我们,插入图片的方法在单元格的paragraphs数组属性的runs数组属性中,只有找到具体的run属性才能add_picture。

    这里有一个问题,虽然在上述代码中我们将对应单元格的标记文本(Icon-XXXXXXX)置为空,但对应的样式属性依然存在,如果通过cell的add_paragraph增加paragraph再通过add_run增加run的样式属性,则会发现输出文档的图像上多出一行,这是因为这个单元格的paragraphs数组变大了,即有两组样式属性对应不同文本,而在python-docx中又无法在不销毁单元格的情况下对单元格内的文本及样式属性进行快速清空,因此,就需要在原来的标记文本置为空的情况下获取对应的样式属性进行插入图片。

    最后输出文件:

    output.save(filename)

    整个流程便结束了。

    展开全文
  • python 生成word表格合并单元格)

    千次阅读 2021-06-28 21:21:07
    python 生成word表格合并单元格) 本人使用pycharm,安装库python-docx 代码: from docx import Document from docx.shared import Inches, Pt from docx.oxml.ns import qn from docx.enum.text import WD_ALIGN_...

    本人使用pycharm,安装库python-docx
    代码:

    from docx import Document
    from docx.shared import Inches, Pt
    from docx.oxml.ns import qn
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    import time,datetime
    document = Document()
    document.styles['Normal'].font.name = u'宋体'
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
    p=document.add_paragraph()
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    #table = document.add_table(rows=37,cols=13,style='Table Grid') row:行  col:列
    table = document.add_table(rows=13,cols=8,style='Table Grid')#生成rows*cols的表格
    table.autofit = False
    table.columns[0].width = Inches(1) #设置表格的列宽和高度
    table.cell(0,0).merge(table.cell(0,2))  #将左上角至右下角坐标的单元格合并在一起
    table.cell(0,3).merge(table.cell(0,3))
    table.cell(0,4).merge(table.cell(0,4)) 
    table.cell(0,5).merge(table.cell(0,7))
    table.cell(1,0).merge(table.cell(1,2))
    table.cell(1,3).merge(table.cell(1,3))
    table.cell(1,4).merge(table.cell(1,4))
    table.cell(1,5).merge(table.cell(1,7))
    table.cell(2,0).merge(table.cell(2,2))
    table.cell(2,3).merge(table.cell(2,7))
    table.cell(3,0).merge(table.cell(12,3))
    table.cell(3,4).merge(table.cell(12,7))
    hdr_cells0 = table.rows[0].cells
    hdr_cells1 = table.rows[1].cells
    hdr_cells2 = table.rows[2].cells
    hdr_cells3 = table.rows[3].cells
    hdr_cells0[0].add_paragraph('线路名称\n').alignment=WD_ALIGN_PARAGRAPH.CENTER #向表格内输入文字
    hdr_cells0[3].add_paragraph('塔号').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells0[4].add_paragraph('缺陷定性').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells0[5].add_paragraph('经纬度').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells1[0].add_paragraph('10KV园区线').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells1[3].add_paragraph('塔号链接').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells1[4].add_paragraph('缺陷链接').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells1[5].add_paragraph('经纬度链接').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells2[0].add_paragraph('缺陷描述').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells2[3].add_paragraph('缺陷描述链接').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells3[0].add_paragraph('图片链接').alignment=WD_ALIGN_PARAGRAPH.CENTER
    hdr_cells3[4].add_paragraph('图片链接').alignment=WD_ALIGN_PARAGRAPH.CENTER
    
    
    

    结果图:
    在这里插入图片描述

    展开全文
  • 同事最近被安排整理资料,主要工作室将文档中的表格数据提取出来并整理层Excel表格供我们FII刀具...一个Word文档中主要包含了有这么几种类型的内容:paragraph(段落)、table(表格)、character(字符)、image(图片)等...
  • python 读取word表格中的表格## 标题 解决方案: 在网上没有找到可行的嵌套表格内容读取方法。查看python-docx包源代码找到以下两种解决方案: 方案一:按行列读到单元格后再取tables,此处table_cell.tables值为一...
  • python合并word

    2020-12-29 07:54:32
    1 场景合并多个word文件到一个文件中,用于文件的批量打印。要求:每个文件合并时,均从从一个新页面开始,文件之间的内容不连在一起。文件的样式不发生改变。2 方案采用python实现,使用python中的python-docx和...
  • 首页介绍下word表格内容,实例如下: 每两个表格后面是一个合并的单元格 2.引入win32com模块 3.具体代码 1 #http://www.jb51.net/article/70318.htm 2 #http://www.cnblogs.com/graphics/articles/...010053相关...
  • python读取word表格

    2021-01-12 02:18:11
    python如何获取word文件中... 本文实例讲述了Python实现批量读取word表格信息的方法。分享给大家供大家参考。具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件...
  • python如何获取word文件中某个关键字之后的表格一片春愁待酒浇。江上舟摇,楼上帘招。秋娘度与泰娘娇。风又飘飘,雨又萧萧。何日归家洗客袍?银字笙调,心字香烧。流光容易把人抛。红了樱桃,绿了芭蕉。用python对...
  • 如何用pythonWord表格按列将内容相同的单元格合并,同时保证只针对每一页面内内容合并,不跨页合并
  • 主要介绍了Python基于xlrd模块处理合并单元格,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Python 合并 Excel 表格

    千次阅读 2020-04-03 08:00:00
    点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤绳锯木断,水滴石穿。之前曾尝试用 Python 写过整理 Excel ...
  • 舍友从网上下载的word题库文档很乱,手动改了大半天才改了一点,想起python是大名鼎鼎的自动化脚本,于是乎开始了pythonword的一顿瞎操作。 分析需求 对文档中的内容进行分析,只留下题目,选项,并且题号要从1...
  • python实现word文档合并

    千次阅读 2021-12-20 23:25:38
    python实现同一个人在多个目录下的word文档合并
  • python docx模块读取word表格遇到合并单元格时的处理python docx模块读取word表格遇到合并单元格时的处理python docx模块读取word表 遇到合并单元格时的处理通过docx模块,读取word里面表格,并进行修改。...
  • 而在word文档中,偶尔我们也需要插入表格,然后编辑表格,那么如何对word中的表格单元格进行合并、拆分呢?一、如何在word中创建表格1.选择“插入”选项卡,单击“表格”按钮,在弹出的列表框中选择“插入表格”命令...
  • pythonword表格转写入excel

    千次阅读 2019-09-30 20:15:57
    想将一份 word 文件中的几个表格转写入 excel 文件中,后续用 excel 处理。 用到 python-docx 和 pandas 分别处理 word 和 excel。 安装 python-docx:pip install python-docx,它不接受 .doc 文件,先转存为 .docx...
  • 一个基础的代码演示(并未对合并的单元格做处理), 可以读取Word文档中的所有表格/标题, 并在Excel中创建相应的sheet 希望能帮助到你. 原先的想法是可以直接打开一次execl然后一次性写入, 网上搜了一圈没有啥好办法, ...
  • python提取word中的表格写入excel
  • ![图片说明](https://img-ask.csdn.net/upload/202008/13/1597317945_734276.png) !... 利用docx处理word表格,在处理合并单元格报错。 但是,在删除图2中红色框内的单元格内容后,可以正常运行。
  • docx库读取word表格中的合并单元格信息
  • python 批量填写word表格

    千次阅读 2020-03-22 22:01:21
    今天因为老爸下乡扶贫工作,要填很多word表格,一张表一张表填写显然太慢了,就简单写了一个python代码去处理。大体上就是使用docx库来批量填写word表格,至于word表格的数据来源是使用xlrd库从excel表格中读取出来...
  • 如何用python将数据写入excel表格工作中经常用到Excel,很情都重复处理,比天的日报,每周报,数据表,这种固定的表其实都是重复性的劳动。最近这段时间一直在学python,但是断断续续的,眼高手低,看别人的代码看的...
  • python代码画word表格python+pycharm)

    千次阅读 2020-04-17 15:39:18
    问题:画一个这样的word表格: 注意: ...最终实现利用python将excel数据读到word表格中。 直接上代码:(需要提前在C:\Kelsey_file路径下建立空白的test.docx) # 需要用到的模块 import xlrd ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,163
精华内容 1,665
关键字:

python合并word表格