在python的使用中,经常在开发的时候会遇到要多个模块联合使用的问题。在一次项目中我就遇到一个这样的问题。
在项目中,要求实现存数据到exel。然后控制打印机打印出来。当然,我选择的是xlrd和xlwt的模块对exel进行处理。处理过后,就怎么也找不到打印的方法,用网上很多其他的方法打印要不然就是打印不了,要不然就是直接打印,根本没有打印设置里的那些处理,不能调整页眉页脚,也不能调整打印的方向。
终于,让我找了很久,找到一个文档,可以实现横向打印操作,同时能够打印出来。
原来打印设置的操作要在EXEL里完成。
下面是我写的代码:
import win32print
import win32com
from win32com.client import Dispatch, constants
import os
import win32api
import win32com.client
def dayin2(date_shebei):
ExcelApp=win32com.client.Dispatch("Excel.Application")
ExcelApp.Visible=False #不显示EXEL的界面,True时为显示。
pwd = os.getcwd() #找到当前文件的位置。
print(pwd)
xls1=pwd+'\\'+str(date_shebei) #找到同程序文件夹下的exel,这里的date_shebei就是我的exel文件名
print(xls1)
xls=xls1
wbook=ExcelApp.Workbooks.Open(xls) #打开要打印的exel文件
wsheet=wbook.Worksheets(1) #选择打印的sheet,1就是第一个,后面以此类推
wsheet.PageSetup.PaperSize=9 # 设置纸张大小,A3=8,A4=9(与Word不同)
wsheet.PageSetup.Orientation=2 # 设置页面方向,纵向=1,横向=2(与Word不同)
#wsheet.usedrange.Columns.AutoFit # 设置所有列自动调整宽度
wsheet.Columns(1).Columnwidth=8 # 设置标题列宽
for i in range(2,30):
wsheet.Columns(i).Columnwidth=5 #设置列宽
for i in range(1,15):
wsheet.Rows(i).RowHeight=30 # 设置行高
ran=wsheet.Range("A1:Q14") # 设置处理范围
ran.Borders.LineStyle=1 # 设置线型为实线(1=实线,4=点划线,-4142=无线条,-4119=双线,-4115虚线)
wsheet.PageSetup.CenterHeader=" " # 中央页眉作为表格名称
wsheet.PageSetup.CenterFooter=" " # 中央页脚显示打印页数
#ran.Borders(11).LineStyle=-4142
wbook.Save()
wbook.Close() # 关闭文件
def print_file_(name):#打印操作,当安装了打印机的电脑会直接调用默认打印机打印。
try:
filename = name
#open (filename, "r")
win32api.ShellExecute (0,"print",filename,'/d:"%s"' % win32print.GetDefaultPrinter (),".",0)
except:
pass
dayin2('1.xlsx')
print_file_('1.xlsx')
#workbook= xlrd.open_workbook('1'+'.xlsx')
#sheet2 = workbook.sheet_by_name(str(date))
下面是我已经处理好的exel文件:
这里没有xlrd和xlwt模块对exel的数据读取和读出,只是对打印页面的设置和控制打印机横向打印出来。下面是我参考的一个文件:
利用-Python-操作-Excel文档.docx
利用 Python 操作 Excel在Excel 2010中打开VBA编辑器,请按 Alt + F11 打开;以下代码在 Excel 2007, Excel 2010中测试通过;
import win32com.client # 导入脚本模块
ExcelApp = win32com.client.Dispatch(“Excel.Application”) # 载入EXCEL模块
ExcelApp.Visible = True # 显示EXCEL应用程序 1、 新建xls文件
wBook = ExcelApp.Workbooks.Add() # 新建空文件,每个文件系统默认建立3个空表
nSheet = wBook.Worksheets.Count # 获取文件的表格数,缺省为3
wSheet = wBook.Worksheets(1) # 打开指定工作表(注意序号从1开始)
wSheet = wBook.Worksheets.Add() # 增加新表,新表为第4个表,相当与wBook.Worksheets(4)
wSheet.Name = “新建表格” # 修改新建表格名称,或者wBook.Worksheets(4).Name = “新建表格”
…… 中间操作 ……
wBook.SaveAs(strName) # 另存文件,注意直接保存用:wBook.Save()
wBook.Close() # 关闭文件(账本) 2、 打开和关闭xls文件
xlsPathName = r"E:\000.xls" # 指定路径名
wBook = ExcelApp.Workbooks.Open(xlsPathName) # 打开指定文件(账本)
wSheet = wBook.Worksheets(1) # 打开指定工作表(注意序号从1开始)
或者wSheet = wBook.Worksheets(“Sheet1”) # 必须使用准确的工作表名称字符串
…… 中间操作 ……
wBook.Close() # 关闭文件(账本) 3、 页面设置
wSheet.PageSetup.PaperSize = 9 # 设置纸张大小,A3=8,A4=9(与Word不同)
wSheet.PageSetup.Orientation = 1 # 设置页面方向,纵向=1,横向=2(与Word不同)
wSheet.PageSetup.TopMargin = 3*28.35 # 页边距上=3cm,1cm=28.35pt
wSheet.PageSetup.BottomMargin = 3*28.35 # 页边距下=3cm
wSheet.PageSetup.LeftMargin = 2.5*28.35 # 页边距左=2.5cm
wSheet.PageSetup.RightMargin = 2.5*28.35 # 页边距右=2.5cm
wSheet.PageSetup.CenterHorizontally = True # 表格打印位置水平居中
wSheet.PageSetup.CenterVertically = False # 表格打印位置垂直不居中(最后一页不好看)
wSheet.PageSetup.HeaderMargin = 2*28.35 # 设置页眉位置=2cm(距上边)
wSheet.PageSetup.FooterMargin = 1*28.35 # 设置页脚位置=1cm(距下边)
wSheet.PageSetup.PrintTitleRows = “$1:$2” # 设置表格标题行
wSheet.PageSetup.CenterHeader = “&“黑体”&15表格名称” # 中央页眉作为表格名称
wSheet.PageSetup.CenterFooter = “第 &P 页,共 &N 页” # 中央页脚显示打印页数
wSheet.Rows(5).PageBreak = -4135 # 在第5行之前插入分页符 注意:表格名称的文本格式设置,详情查询“页眉和页脚的格式代码”
&“黑体”&15 # 设置字体,字大,颜色
&B&I&U # 设置字体加黑、加粗、下划线
&L&C&R # 设置左中右对齐 4、 单元格操作
cv = wSheet.Cells(1, 1).Value # 获取单元格数值
wSheet.Cells(1, 1).Interior.Color = 0xff00ff # 设置单元格背景色
cel = wSheet.Cells(2, 2) # 获取单元格对象
cv = cel.Offset(3, 3).Value # 获取偏移后的单元格,即(4,4)
#Offset以当前单元格为(1,1),偏移之后的单元格为(a1+a2-1, b1+b2-1) 注:range与Cells, Rows, Columns的绝大多数属性类似,但是后三者
后面可以接序号(2,3)表示具体单元格或行列,不接序号指所有单元格或行列。 5、 行列操作
wSheet.Rows.AutoFit() # 自动适合行
wSheet.Rows(1).Delete() # 删除第1行
wSheet.Columns.Autofit() # 自动适合列
wSheet.Columns(1).Delete() # 删除第1列
wSheet.Columns(1).Columnwidth = 30 # 设置列宽
wSheet.Columns(1).NumberFormatLocal = “000000” # 设置数值格式
wSheet.Rows(“2:2”).Select() # 必须选择第2行,才能冻结第1行!!
ExcelApp.ActiveWindow.FreezePanes = True # 冻结第1行 6、 遍历工作表的所有单元格
nRow = wSheet.usedrange.rows.count # 获取指定工作表的行数
nCol = wSheet.usedrange.columns.count # 获取指定工作表的列数
for i in range(1, nRow+1):
for j in range(1, nCol+1)
…… 中间操作 ……
break
break # 注意必须分别退出 7、 搜索指定数值
cel = wSheet.Columns(2).Find(123) # 在第2列查找某整数值123
if(cel):
adr = cel.Address # 获取该单元格首地址,以便退出循环
while(True): # 注意系统的FindNext()是个死循环,会反复搜索
…… 中间操作 ……
cel = wSheet.Columns(2).FindNext(cel) # 注意FindNext()参数为cel
if(cel.Address==adr): break # 返回到单元格首地址时,就退出 7、 格式设置
wSheet.Cells.Font.Name = “Arial” # 设置字体
wSheet.Cells.Font.Size = 10 # 设置字大
wSheet.Cells.Font.Bold = True # 设置粗体
wSheet.Cells.Font.Italic = True # 设置斜体
wSheet.usedrange.Columns.AutoFit # 设置所有列自动调整宽度
wSheet.Cells.HorizontalAlignment = 2 # 设置左对齐(1=两端, 2=左, 3=中, 4=右)
ran = wSheet.Range(wSheet.Cells(1,1),wSheet.Cells(nRow,nCol))
ran.Hyperlinks.Delete() # 删除指定范围的链接
ran.Font.Name = “宋体” # 设置字体
ran.Font.Size = 10 # 设置字大
ran.Font.Bold = False # 设置黑体
ran.Font.Italic = True # 设置斜体
ran.HorizontalAlignment = -4108 # 水平对齐
ran.VerticalAlignment = -4108 # 垂直对其 8、 绘制表格线
ran = wSheet.Range(“A1:D5”) # 设置处理范围
ran.Borders.LineStyle = 1 # 设置线型为实线(1=实线,4=点划线,-4142=无线条,-4119=双线,-4115虚线)
ran.Borders(11).LineStyle = -4142 # 去除范围内中间竖线(8=上边线,9=下边线,7=左框线,10=右框线,11=竖框线,12=横框线) 9、 行列宽度设置
wSheet.Rows(1).RowHeight = 20 # 设置第1行的行高
wSheet.Columns(1).ColumnWidth = 10 # 设置第1列的列宽
10、使用公式进行统计
ran = wSheet.Range(“A1:A10”) # 设置计算范围
a = ExcelApp.WorksheetFunction.Sum(ran) # 范围数值求和
b = ExcelApp.WorksheetFunction.Max(ran) # 范围最大值
注:常用函数可以在插入函数对话框中查找,包括 Average, Max, Min, Sum, StDev等;