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

Pyhton 专栏收录该内容
7 篇文章 0 订阅

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

在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等;

  • 9
    点赞
  • 4
    评论
  • 30
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值