可以采用一些操作Excel的模块去实现,比如xlrd、xlwt、openpyxl、xl" />
乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 用<em>Python</em>导出工程文件两个子页里的数据成为两个<em>exce

用<em>Python</em>导出工程文件两个子页里的数据成为两个<em>exce

作者:乔山办公网日期:

返回目录:excel表格制作


PY不会,VB我会,需要文档

可以采用一些操作Excel的模块去实现,比如xlrd、xlwt、openpyxl、xlsxwriter等模块。xlrd模块主要用于读取Excel表,xlwt与xlsxwriter模块主要用于将数据写入表中,两个模块任选其一即可,但是xlwt与xlsxwriter模块不支持修改表,所以在信息追加的时候会较麻烦,有些朋友可能这个地方遇到了很大的问题,其实这个问题至少有两种思路解决:
A、换成其他模块,比如openpyxl等,这个模块实现起来会相对简单一些,比如目前已经收到的苏wisdom同学采用的就是这种方法,值得表扬,所以以下方法1会参照苏wisdom同学的答案。此外,截止至目前为止『歹ピ№ㄕ』同学、微雨同学、黄梦颖同学已经提交第二次作业,一并表扬。
B、仍然使用xlwt与xlsxwriter等模块,但是先将每次读取的信息存储到list(列表)中,然后,最后一次写入。这一种方式稍微复杂一些,所以老师在方法2中采用这种方式去写,目的是给大家一个解决方案的参考,有更优的方案可以随时邮箱反馈。
此外,还有一个难点,即一个表格中有多个636f70797a686964616f338sheet,我们希望能够用程序自动获取这多个sheet,然后将各sheet中的内容一并写入到最终表格中,目前答案中暂时没有看到解决这个问题,如果大家能解决这个问题,是极好的。各位同学可以参考老师的第二种方法,第二种方式中,考虑了多个sheet的问题,各位也可以对程序进行优化。
1、新建一个文件夹、将要合并的表格放到里面、新建一个表格、用excel打开、右7a686964616fe78988e69d83336击Sheet1
2、选择查看代码(PS:excel有着一项,WPS没有)
3、将下列代码复制到文本框中:
Sub 合并当前目录下所有工作簿的全部工作表()
Dim MyPath, MyName, AWbName
Dim Wb As workbook, WbN As String
Dim G As Long
Dim Num As Long
Dim BOX As String
Application.ScreenUpdating = False
MyPath = ActiveWorkbook.Path
MyName = Dir(MyPath & "\" & "*.xls")
AWbName = ActiveWorkbook.Name
Num = 0
Do While MyName <> ""
If MyName <> AWbName Then
Set Wb = Workbooks.Open(MyPath & "\" & MyName)
Num = Num + 1
With Workbooks(1).ActiveSheet
.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
For G = 1 To Sheets.Count
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)
Next
WbN = WbN & Chr(13) & Wb.Name
Wb.Close False
End With
End If
MyName = Dir
Loop
Range("B1").Select
Application.ScreenUpdating = True
MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
End Sub
4、点击运行、一段时间(取决于表格的大小和多少)后,合并完成了。

思路 
利用python xlrd包读取excle文件,然后将文件内容7a686964616fe58685e5aeb9365存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文件中。

完整代码

# -*- coding: utf-8 -*-#将多个Excel文件合并成一个import xlrdimport xlsxwriter#打开一个excel文件def open_xls(file):
fh=xlrd.open_workbook(file)    return fh#获取excel中所有的sheet表def getsheet(fh):
return fh.sheets()#获取sheet表的行数def getnrows(fh,sheet):
table=fh.sheets()[sheet]    return table.nrows#读取文件内容并返回行内容def getFilect(file,shnum):
fh=open_xls(file)
table=fh.sheets()[shnum]
num=table.nrows    for row in range(num):
rdata=table.row_values(row)
datavalue.append(rdata)    return datavalue#获取sheet表的个数def getshnum(fh):
x=0
sh=getsheet(fh)    for sheet in sh:
x+=1
return xif __name__=='__main__':    #定义要合并的excel文件列表
allxls=['F:/test/excel1.xlsx','F:/test/excel2.xlsx']    #存储所有读取的结果
datavalue=[]    for fl in allxls:
fh=open_xls(fl)
x=getshnum(fh)        for shnum in range(x):
print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")
rvalue=getFilect(fl,shnum)    #定义最终合并后生成的新文件
endfile='F:/test/excel3.xlsx'
wb1=xlsxwriter.Workbook(endfile)    #创建一个sheet工作对象
ws=wb1.add_worksheet()    for a in range(len(rvalue)):        for b in range(len(rvalue[a])):
c=rvalue[a][b]
ws.write(a,b,c)
wb1.close()
print("文件合并完成")1234567891011128192021222324252627282930337383940414243444546474849505575859606162

源文件excel1:

源文件excel2: 
 

运行结果:

合并后的excel3: 

相关阅读

关键词不能为空
极力推荐
  • excel冻结窗口-EXCEL如何冻结行和列

  • 在某些行业中经常会用到excel工作表,工作表的数据量较大。所以我们用到固定行和列来锁定标题栏,方便审核及查找信息,如何进行行和列的冻结,笔者讲解两个冻结单元格的个人经验

ppt怎么做_excel表格制作_office365_word文档_365办公网