python - 如何使用Python将目录中的所有图像添加到word文档中

标签 python ms-word pywin32

我一直在尝试使此代码工作,以便我可以将数百张图片添加到 Microsoft Word 文档中,但无法完全使其工作。我认为问题在于正确定义图像的位置。

import win32com.client as win32
import os

#creating a word application object
wordApp = win32.gencache.EnsureDispatch('Word.Application') #create a word application object
wordApp.Visible = True # hide the word application
doc = wordApp.Documents.Add() # create a new application

#Formating the document
doc.PageSetup.RightMargin = 20
doc.PageSetup.LeftMargin = 20
doc.PageSetup.Orientation = win32.constants.wdOrientLandscape
# a4 paper size: 595x842
doc.PageSetup.PageWidth = 595
doc.PageSetup.PageHeight = 842
header_range= doc.Sections(1).Headers(win32.constants.wdHeaderFooterPrimary).Range
header_range.ParagraphFormat.Alignment = win32.constants.wdAlignParagraphCenter
header_range.Font.Bold = True
header_range.Font.Size = 20
header_range.Text = "Header Of The Document"

# Inserting Tables

total_column = 2
total_row = 5
rng = doc.Range(0,0)
rng.ParagraphFormat.Alignment = win32.constants.wdAlignParagraphCenter
table = doc.Tables.Add(rng,total_row, total_column)
table.Borders.Enable = False
if total_column > 1:
    table.Columns.DistributeWidth()

#Collecting images in the same directory and inserting them into the document
frame_max_width= 167 # the maximum width of a picture
frame_max_height= 125 # the maximum height of a picture

filenames = os.listdir("some_directory")  #Do I need this? I think it might be the issue...

for index, filename in enumerate(filenames): # loop through all the files and folders for adding pictures
    if os.path.isfile(os.path.join(os.path.abspath("."), filename)): # check whether the current object is a file or not
        if filename[len(filename)-3: len(filename)].upper() == 'JPG': # check whether the current object is a JPG file

            #calculating the position of each image to be put into the correct table cell
            cell_column= index % total_column + 1
            cell_row = index / total_column + 1
            print 'cell_column=%s,cell_row=%s' % (cell_column,cell_row)

            #we are formatting the style of each cell
            cell_range= table.Cell(cell_row, cell_column).Range
            cell_range.ParagraphFormat.LineSpacingRule = win32.constants.wdLineSpaceSingle
            cell_range.ParagraphFormat.SpaceBefore = 0 
            cell_range.ParagraphFormat.SpaceAfter = 3

            #this is where we are going to insert the images
            current_pic = cell_range.InlineShapes.AddPicture(os.path.join(os.path.abspath("."), filename))
            width, height = (frame_max_height*width/height, frame_max_height)

            #changing the size of each image to fit the table cell
            current_pic.Height= height
            current_pic.Width= width

            #putting a name underneath each image which can be handy
            table.Cell(cell_row, cell_column).Range.InsertAfter("\n"+filename)

这段代码让我创建了文档并插入了一张图像,但随后出现以下错误:Traceback(最近一次调用最后一次): 文件“pic_dump.py”,第 56 行,位于 宽度,高度=(框架最大高度*宽度/高度,框架最大高度) NameError:名称“宽度”未定义。

非常感谢您的帮助。

最佳答案

问题出在这一行。 宽度,高度=(frame_max_height*宽度/高度,frame_max_height)

您正在设置width = frame_max_height*width/height,但Python不可能乘以frame_max_height * width 当你没有告诉 Python width 是什么时。您需要先将 width 设置为等于某个值才能解决此错误。

关于python - 如何使用Python将目录中的所有图像添加到word文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928030/

相关文章:

python - 使用 Python 从安全组中删除 AD 用户

python - 窗口声称可见,但实际不可见

python - 通过 Python 与 Autocad 的 Win32Com 连接失败

python - 为什么我在尝试使用 snscraper 时会收到此错误?

python - GitPython 可以与 Python 3.x 一起使用吗?

PHP 使用 COM 将 word 转换为 html

c# - 将许多 excel 图表作为链接粘贴到 Word

python - 在 C++ 中使用 python obj 与 pybind 和 multiprocessing.Process

python - 升级pytest导致TypeError : 'NoneType' object is not callable error

ms-word - Word 2007 架构库存储在哪里?