我正在编写一个程序,以从ASCII文件中获取数据并将数据放置在Word文档中的适当位置,并仅使特定单词加粗并加下划线。我是Python的新手,但是我在Matlab编程方面拥有丰富的经验。我的代码是:
#IMPORT ASCII DATA AND MAKE IT USEABLE
#Alternatively Pandas - gives better table display results
import pandas as pd
data = pd.read_csv('203792_M-51_Niles_control_SD_ACSF.txt', sep=",",
header=None)
#print data
#data[1][3] gives value at particular data points within matrix
i=len(data[1])
print 'Number of Points imported =', i
#IMPORT WORD DOCUMENT
import docx #Opens Python Word document tool
from docx import Document #Invokes Document command from docx
document = Document('test_iteration.docx') #Imports Word Document to Modify
t = len(document.paragraphs) #gives the number of lines in document
print 'Total Number of lines =', t
#for paragraph in document.paragraphs:
# print(para.text) #Prints the text in the entire document
font = document.styles['Normal'].font
font.name = 'Arial'
from docx.shared import Pt
font.size = Pt(8)
#font.bold = True
#font.underline = True
for paragraph in document.paragraphs:
if 'NORTHING:' in paragraph.text:
#print paragraph.text
paragraph.text = 'NORTHING: \t', str(data[1][0])
print paragraph.text
elif 'EASTING:' in paragraph.text:
#print paragraph.text
paragraph.text = 'EASTING: \t', str(data[2][0])
print paragraph.text
elif 'ELEV:' in paragraph.text:
#print paragraph.text
paragraph.text = 'ELEV: \t', str(data[3][0])
print paragraph.text
elif 'CSF:' in paragraph.text:
#print paragraph.text
paragraph.text = 'CSF: \t', str(data[8][0])
print paragraph.text
elif 'STD. DEV.:' in paragraph.text:
#print paragraph.text
paragraph.text = 'STD. DEV.: ', 'N: ', str(data[5][0]), '\t E: ',
str(data[6][0]), '\t EL: ', str(data[7][0])
print paragraph.text
#for paragraph in document.paragraphs:
#print(paragraph.text) #Prints the text in the entire document
#document.save('test1_save.docx') #Saves as Word Document after Modification
我的问题是如何仅使“ NORTHING:”加粗并带有下划线:
paragraph.text = 'NORTHING: \t', str(data[1][0])
print paragraph.text
因此,我编写了一个伪的“查找并替换”命令,如果要替换的所有值都完全相同,则该命令很好用。但是,我需要用ASCII文件的第二个数组中的值替换第二段中的值,并用第三个数组中的值替换第三段..etc。 (我必须使用查找和替换,因为要使文档的格式高级以使我可以在程序中复制,除非有一个程序可以读取Word文件并将程序写回Python脚本...对它进行反向工程)
我仍在学习,因此代码对您而言似乎很粗糙。我只是想自动完成无聊的复制和粘贴过程。
答案 0 :(得分:1)
未经测试,但是假设python-docx与python-pptx类似(应该是,它是由同一位开发人员维护的,并且粗略地查看了文档说明它与PPT / DOC文件的交互方式是相同的,使用相同的方法,等等。
为了操作段落或单词的子字符串,您需要使用run
对象:
https://python-docx.readthedocs.io/en/latest/api/text.html#run-objects
实际上,这看起来像:
for paragraph in document.paragraphs:
if 'NORTHING:' in paragraph.text:
paragraph.clear()
run = paragraph.add_run()
run.text = 'NORTHING: \t'
run.font.bold = True
run.font.underline = True
run = paragraph.add_run()
run.text = str(data[1][0])
从概念上讲,您需要为要操作的段落/文本的每个 part 创建一个run
实例。因此,首先我们使用粗体字体创建一个run
,然后添加另一个运行(我认为不会是粗体/下划线,但是如果只是将其设置为False
)。
注意:最好将所有import
语句放在模块顶部。
这可以通过使用诸如字典之类的映射对象进行一些优化,您可以使用该映射对象将匹配值(“ NORTHING”)与keys
相关联,并将段落文本的其余部分与{{1}相关联}。 还未经测试
values