关于Python控制打印机如何横向打印EXEL

在python的使用中,经常在开发的时候会遇到要多个模块联合使用的问题。在一次项目中我就遇到一个这样的问题。
在项目中,要求实现存数据到exel。然后控制打印机打印出来。当然,我选择的是xlrd和xlwt的模块对exel进行处理。处理过后,就怎么也找不到打印的方法,用网上很多其他的方法打印要不然就是打印不了,要不然就是直接打印,根本没有打印设置里的那些处理,不能调整页眉页脚,也不能调整打印的方向。
终于,让我找了很久,找到一个文档,可以实现横向打印操作,同时能够打印出来。

原来打印设置的操作要在EXEL里完成。
下面是我写的代码:

import win32print
import win32com
from win32com.client import Dispatch, constants
import os
import win32api
import win32com.clientdef 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=-4142wbook.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等;

关于Python控制打印机如何横向打印EXEL相关推荐

  1. python中print横向打印

    python的print函数 复制下源码如下: 这是pythone3的源码.从这个源码中我们可以看到end参数控制了print在每次打印完毕一个值的后会默认添加一个"\n"换行,因 ...

  2. [蓝桥杯]横向打印二叉树 Python满分解法

    [蓝桥杯]横向打印二叉树 Python满分解法 #树的结点类定义 class Node:def __init__(self,left=0,right=0,w=0,line=0,leng=0):self ...

  3. python皮卡丘字符打印代码,python画皮卡丘的代码

    大家好,本文将围绕用python画一只可爱的皮卡丘展开说明,python皮卡丘字符打印代码是一个很多人都想弄明白的事情,想搞清楚python皮卡丘编程代码教程需要先了解以下几个事情. 1.python ...

  4. python控制打印机

    python 控制打印机打印文件 一次帮朋友做一个小工具,从excel表格中逐行获取内容插入docx模板中,然后打印出来.前边的功能我在其他帖子里介绍了,就打印一块,单拉出来说一下,以备今后使用参考. ...

  5. 使用python的win32模块打印PDF

    使用win32api.ShellExecute打印文件的帖子很多,但是如果每个PDF的打印设置都不一样就很麻烦.这里拿一个惠普打印机型号作为范例.其他打印机也差不多. 如果要打印具体页面,需要安装Gh ...

  6. python画图代码星星-Python利用for循环打印星号三角形的案例

    简单的for循环打印三角形 1,for循环方法实现星星三角 代码: for i in range(0,5): for j in range(i+1): if i == 4: print("* ...

  7. python tqdm进度条打印

    python tqdm进度条打印 使用tqdm来进行迭代可以打印进度条,tqdm中的tqdm()是实现进度条美化的基本方法,在for循环体中用tqdm()包裹指定的迭代器或range(). 简单展示: ...

  8. 水晶报表横向打印BUG处理

    我们在做水晶报表的时候无论怎么做都不能实现横向打印,这是水晶报表10的一个bug.这个问题是很好处理的,处理它有两种方法,一种是通过反编译水晶报表代码找到错误进行处理,还有一种是通过修改一个水晶报表的 ...

  9. python打印表格_怎么使用python脚本实现表格打印?

    大家在办公学习中,有没有被打印机的功能所惊叹?可能大部分小伙伴并没有在意打印机的实现原理,只知道它是可以复印东西的,当小编提出这个问题的时候,那大家有没有考虑过呢?有些小伙伴可能会说这个和我们Pyth ...

最新文章

  1. instanceOf,isInstance,Class,isAssignableFrom区别比较
  2. Android开发人员不得不收集的代码(不断更新中...)
  3. 阿里云多个智物新品集体出道,持续加速产业智能化
  4. 牛客网_PAT乙级_1020完美数列(25)【vector sort 最后一个测试用例超时】
  5. 创建新的SAP CRM product search scenario - 如何在SAP CRM里实现自定义的产品搜索场景
  6. [家里蹲大学数学杂志]第405期中国科学院数学与系统科学研究院2015年夏令营分析与代数试题...
  7. C# 图片画矩形,添加文字
  8. Android跟web哪个好,比系统自带的WebView更好用 | AgentWeb
  9. 适合程序员演讲的定场诗
  10. python中在一个脚本调用另一个脚本类中函数变量值
  11. 生活中常见物联网实例_包邮赠书| 什么是物联网?常见IoT 物联网协议最全讲解...
  12. OpenKM文档管理系统开源源码v6.3.9
  13. 单片机蓝牙模块与手机蓝牙通信(7)
  14. 兼容性视图html页面,浏览器兼容性视图设置在哪
  15. python经纬度转换xy坐标公式_经纬度坐标转换为距离及角度(Python)
  16. 优衣库真的是一家技术驱动型公司?
  17. linux中安装openoffice
  18. D3基础 | 条形图
  19. java 字符补位_JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码...
  20. Servlet的一些操作

热门文章

  1. linux内存双通道,两根内存就是双通道?太年轻
  2. Android工作经验6年,Android事件分发机制收藏这一篇就够了,分享PDF高清版
  3. java 图片质量压缩_java图片高质量压缩
  4. 为何要配置环境变量?
  5. Qt QTreeWidget 详解
  6. 【react】This synthetic event is reused for performance reasons.
  7. Spring-Boot框架学习视频-百度云盘
  8. 青春版网盘:不限度,10GB 空间
  9. oc对mysql支持_iOS中数据库使用什么技术实现的
  10. 笔记本做wifi热点