python读写xlsx文档的小结

今天接到任务需要合并几万行的几个表格,于是决定写个脚本看看pyhon的基本操作。

使用环境:

Python 版本: Python 3.5.2 

查看命令:python --version

Ubuntu 16.04 

1、先来看看python打印东西,让它运行起来

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
print ("hello world ")

看起来还比较顺利

2、我们来创建一个文件试试

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import time
import os

t = time.strftime('%Y-%m-%d',time.localtime())
suffix = '.txt'
newfile = 'FileName' + t + suffix
if not os.path.exists(newfile):
	f = open(newfile, 'w')
	print('creat file ' + newfile)
	f.close()
else :
	print('exit file ' + newfile)

3、文件可以了 但是需要指定路径,不然一直在当前路径下

#创建文件夹

directory ="./merged/"
if(os.path.exists(directory) == False):
	os.makedirs(directory)
#change directory
os.chdir(directory)
cwd = os.getcwd()

好像还比较顺利,接下来需要读、写 xlsx文件了

4、用openpyxl 完成xlsx文件读写

一开始百度的都是xlrd,xlwt,后来要做带格式粘贴,它的支持比较少,但是速度真的快。

然后用openpyxl,注意 用xlrd、xlwt处理过的文档就不要用openpyxl处理了,不然打不开。。。

openpyxl好像只支持xlsx格式 xls不行

安装 openpyxl 命令 

pip install openpyxl

如果import openpyxl导入不成功:可以卸载再安装

pip uninstall XXXX

5、创建openpyxl的workbook,创建sheet页,获取sheet页

outbook = openpyxl.Workbook()
#中文问题可以转码
outsheetname = "SheetName".encode('utf-8')
outsheetname = outsheetname.decode('utf-8')
outbook.create_sheet(outsheetname) # 添加页
outsheet = outbook[outsheetname]

6、读取xlsx文件

import openpyxl
import os

#读取文件夹下的所有文件
os.chdir('./')
filelist =  os.listdir(os.getcwd())
filelist.sort()
print (filelist)


#遍历文件
for filename in filelist:
	if(filename.__contains__('.xlsx')):
		print('filename : ' + filename)
		table = openpyxl.load_workbook(filename)
		sheet = table[outsheetname]
		#获取表格有效行数
		row_num = sheet.max_row
		col_num = sheet.max_column
		print('max_row',row_num ,'max_column',col_num)

		for row in range(row_num ) :
			for col in range(14):
				 print(sheet.cell(row + 1 ,col + 1).value)
		print("out row", outrow)

文件的cell索引是从 “1” 开始计算的不是从 “0”

7、写文件到另外一个xlsx文件中

outrow = 0

row_num = sheet.max_row
col_num = sheet.max_column
for row in range(row_num) :
	outrow = outrow + 1
	for col in range(col_num):
        outsheet.cell(outrow + 1,col + 1).value = sheet.cell(row + 1,col+1).value

8、带格式的拷贝(把格式复制过去)

outsheet.cell(outrow + 1,col + 1).font = copy(sheet.cell(row + 1,col+1).font)
outsheet.cell(outrow + 1,col + 1).border = copy(sheet.cell(row + 1,col+1).border)
outsheet.cell(outrow + 1,col + 1).fill = copy(sheet.cell(row + 1 ,col+1).fill)
outsheet.cell(outrow + 1,col + 1).number_format = copy(sheet.cell(row + 1,col+1).number_format)
outsheet.cell(outrow + 1,col + 1).protection = copy(sheet.cell(row + 1,col+1).protection)
outsheet.cell(outrow + 1,col + 1).alignment = copy(sheet.cell(row + 1,col+1).alignment)

9、最后保存不要忘记了


outbook = openpyxl.Workbook()
outsheetname = "newsheet".encode('utf-8')
outsheetname = outsheetname.decode('utf-8')
outbook.create_sheet(outsheetname) # 添加页
outsheet = outbook[outsheetname]

......
#outbook里面有个outsheet,outsheet拷贝了数据

outbook.save("./out/" + "newfile.xlsx")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值