python截取某一段文字分栏_Python文本数据互相转换(pandas and win32com)

本文介绍了如何使用Python的win32com库操作Word进行文本数据转换,包括从Excel文件读取数据并保存到Word文档,设置页面属性和分栏。通过实例展示了创建表格、设置字体样式以及保存和关闭文档的步骤。
摘要由CSDN通过智能技术生成

(工作之后,就让自己的身心都去休息吧)

今天介绍一下文本数据的提取和转换,这里主要实例的转换为excel文件(.xlsx)转换world文件(.doc/docx),同时需要使用win32api,同pywin32库。

pandas库我之前的博客里面都有详细的介绍和使用,这里主要介绍下win32库。

PyWin32是一个Python库,可以为Python提供Windows扩展。换句话说,它允许您访问各种Windows功能 - 至少Microsoft Office的功能 - 而无需使用Microsoft的一种语言,如Visual Basic或C#。

Pywin32库的一些概念:

1.PyWin32是一个包装器,它使您可以使用Visual Basic for Applications(VBA)中提供的相同方法和属性,但使用Python的语法。

2.这是Word 2007开发人员参考,有用的部分是对象模型参考。我必须检查它们以了解可用的方法和属性,因此它们非常重要。

3.在任何参考资料中,您都会找到一些用VBA编写的示例。您所要做的就是将它们转换为Python的语法。

首先介绍下win32com:

1 #coding: UTF-8

2 importwin32com.client3 WordApp = win32com.client.Dispatch("Word.Application")4 WordApp.Visible = False

1.因为你使用的是中国汉字,windows中文本文档大多数都是汉子处理,所以前提一定要加上#coding: UTF-8。

2.引入win32com模块。

3.打开world应用程序,python操作world程序以便写入文件。

4.是否在桌面打开world程序,这里的False就是不需要打开,反之为True。

这里主要介绍win32api的一些属性,主要为操作world文档所使用:

#新建空文档

docx=WordApp.Documents.Add()#打开指定文档

docx = WordApp.Documents.Open(r'C:\Users\Administrator\Desktop\b.docx')#保存到指定文档

docx.SaveAs(r"c:\Users\Administrator\Desktop\c.doc") #文档保存#关闭文档,需在保存文档之后

docx.Close(-1)

这里需要特别注意的是,SaveAs为另存文件,即可以不需要创建文件,另一个是打开指定文档,这里如果你不需要存入一个文档的话,就只需要打开一个文档存到另一个文档也可以,这里可以doc可以转换docx文件。

但是,如果你都要操作在你个world文件内,那么就需要追加一个docx文件内:

1 #新建空文档

2 docx=WordApp.Documents.Add()3 #打开指定文档,进行操作

4 docx = WordApp.Documents.Open(r'C:\Users\Administrator\Desktop\b.docx')5 #保存

6 docx.Save

这里只需要Save即可,原理就是打开一个指定的world文件,将数据存入进去后保存即可。

这里关于world文件的保存和添加介绍完。

下面介绍些world文件的一些属性:

1、页面属性:

1 docx.PageSetup.PaperSize = 7 #纸张大小, A3=6, A4=7

2 docx.PageSetup.PageWidth = 8.7*28.35 #纸张宽大小后PaperSize 就不需要了

3 docx.PageSetup.PageHeight = 13*28.35   #纸张高大小

4 docx.PageSetup.Orientation = 1 #页面方向, 竖直=0, 水平=1

5 docx.PageSetup.TopMargin = 2.45*28.35 #页边距上=2.45cm,1cm=28.35pt

6 docx.PageSetup.BottomMargin = 2.45*28.35 #页边距下=2.45cm

7 docx.PageSetup.LeftMargin =0.75*28.35 #页边距左=0.75cm

8 docx.PageSetup.RightMargin = 0.5*28.35 #页边距右=0.5cm

2、页面布局:

1 sel = WordApp.Selection #获取Selection对象

2 sel.InsertBreak(8) #插入分栏符=8, 分页符=7

3 sel.Font.Name = "宋体" #字体

4 sel.Font.Size = 11 #字大

5 sel.Font.Bold = True #粗体

6 sel.Font.Italic = True #斜体

7 sel.Font.Underline = True #下划线

8 sel.ParagraphFormat.LineSpacing = 2*12 #设置行距,1行=12磅

9 sel.ParagraphFormat.Alignment = 1 #段落对齐,0=左对齐,1=居中,2=右对齐

10 sel.TypeText("aaa") #插入文字

11 sel.TypeParagraph() #插入空行

12 sel.TypeText("\n") #插入空白行

3、表格:

1 tab=docx.Tables.Add(sel.Range, 7, 2) #增加一个16行2列的表格

2 tab.Style = "网格型"        #显示表格边框

3 tab.Columns(1).SetWidth(2.4*28.35, 0) #调整第一列宽

4 tab.Columns(2).SetWidth(5.5*28.35, 0)5 tab.Rows.Alignment = 1 #表格对齐,0=左对齐,1=居中,2=右对齐

6 tab.CellCellCellCell(1,1).Range.Text = "aaa" #填充内容,注意Excel中使用wSheet.Cells(i,j)

7 sel.MoveDown(5, 16)        #向下移动2行,5=以行为单位

8 line_cells = tab.columns[0].cells   #第一列所有空格 0,1代表第几列

9 line_cells[0].Range.Text= 'N'     #第一列第一个空格中添加“N”

10 line_cells[1].Range.Text = '号'.decode('utf-8')11 line_cells[2].Range.Text = '牌'.decode('utf-8')12 line_cells[3].Range.Text = '数量'.decode('utf-8')13 line_cells[4].Range.Text = '日期'.decode('utf-8')14 line_cells[5].Range.Text = '名称'.decode('utf-8')15 line_cells[6].Range.Text = '编号'.decode('utf-8')

贴上Pandas模块和win32com的完整代码(主要看分布):

1 #coding: UTF-8

2 importwin32com.client3 importtime4 importpandas as pd5 defparser():6 df = pd.read_excel('C:\\Users\\Administrator\\Desktop\\222.xlsx')7 pd.set_option('display.width',None)8 WordApp = win32com.client.Dispatch("Word.Application")9 #WordApp.Visible = False

10

11

12 for i inxrange(0,len(df)):13 Pn = df.iloc[i,0].encode('utf-8')14 partno = df.iloc[i,1].encode('utf-8')15 manufacturer = df.iloc[i,2]16 quantity = str(int(df.iloc[i,3]))17 contractnum = df.iloc[i,4].encode('utf-8')18 #print type(contractnum)

19 #print manufacturer

20 doc=WordApp.Documents.Add()21 doc = WordApp.Documents.Open(r'C:\Users\Administrator\Desktop\b.docx')22 doc.PageSetup.PageWidth = 9*28.35

23 doc.PageSetup.PageHeight = 13*28.35

24 doc.PageSetup.LeftMargin = 0.6*28.35

25 doc.PageSetup.RightMargin = 0.5*28.35

26

27 sel =WordApp.Selection28 sel.Font.Name = "宋体"

29 sel.Font.Size = 11

30 sel.TypeText("\n")31 sel.TypeText("\n")32 sel.TypeText("\n")33 sel.TypeText("\n")34 sel.TypeText("\n")35 sel.TypeText("\n")36 sel.TypeText("\n")37 tab=doc.Tables.Add(sel.Range, 7, 2)38 #print type(tab.location)

39 tab.Style = "网格型".decode('utf-8')40 tab.Columns(1).SetWidth(2.4*28.35, 0)41 tab.Columns(2).SetWidth(5.5*28.35, 0)42 line_cells =tab.columns[0].cells43 line_cells[0].Range.Text= 'N'

44 line_cells[1].Range.Text = '号'.decode('utf-8')45 line_cells[2].Range.Text = '牌'.decode('utf-8')46 line_cells[3].Range.Text = '数量'.decode('utf-8')47 line_cells[4].Range.Text = '日期'.decode('utf-8')48 line_cells[5].Range.Text = '名称'.decode('utf-8')49 line_cells[6].Range.Text = '编号'.decode('utf-8')50 #print help(doc.SaveAs)

51 doc.Save52 print 'Is oK!'

53 #doc.SaveAs(r'C:\Users\Administrator\Desktop\b.docx')

54 doc.Close()55 WordApp.Quit()56 if __name__ == '__main__':57 parser()

这里主要注意下下操作world程序和for循环的位置就可以了,还有close,不然你的程序就会报错,因为你打开一个world程序未关闭,再次打开windows会提示未保存文档不可操作,所以程序会报错!

更多技术信息添加群:607021567

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值