import openpyxl
import xlrd
import os.path
import time
workbook1 = openpyxl.load_workbook('C:/Users/Administrator/Desktop/汇总.xlsx')#提前建一个汇总的表
name_list = workbook1.sheetnames #获取提前建一个汇总的表的sheet表名
sheet1 = workbook1[name_list[0]]#取第一个sheet表
sheet1.append(['姓名','工资','工资实发','年度'])#给汇总表添加标题,标题名按照提取表的字段来命名
path = 'C:/Users/Administrator/Desktop/汇总excel/'#需要汇总表的文件夹位置
file_list = os.listdir(path) # 获取这个文件夹下所有的excel文档。
for file in file_list:
if os.path.splitext(file)[1]=='.xlsx': #获取所有xlsx的文件
workbook = openpyxl.load_workbook(path+file) # 加载已经存在的excel
name_list = workbook.sheetnames #获取所有的sheet表名
sheet = workbook[name_list[0]]#取第一个sheet表
#print(sheet.dimensions) 获取所有表的范围 A1:O24
cell = sheet['A']
for i in cell:
if i.value == '序号':
a = i.row
print(a)
elif i.value == '合计':
b = i.row
print(b)
#此循环取需要获取的行数范围,其中的A列、序号和合计为起始位置定位
cell1 = sheet[sheet.dimensions]
for i in cell1:
for j in i:
if j.value == '姓名':
e = j.column
print(e)
elif j.value == '工资':
c = j.column
print(c)
elif j.value == '工资实发':
d = j.column
print(d)
# 此循环取需要获取的列数,其中的姓名、工资和工资实发为列位置定位
test_case=[]
for row in range(a+2,b):
sub_data={}
sub_data['姓名']=sheet.cell(row,e).value
sub_data['工资']=sheet.cell(row,c).value
sub_data['工资实发']=sheet.cell(row,d).value
#print(list(sub_data.keys()))
ll=list(sub_data.values())
#print(ll)
test_case.append(ll)
print (file)
#print("读取到的所有测试用例:",test_case)
# 此循环为将需要获取的列字段对应的行数范围值取出来
max_row = sheet1.max_row #取汇总表的行数
print(max_row)
for row in test_case:
sheet1.append(row)
# 此循环为 将数据追加到汇总表中
hang = list(range(max_row+1,max_row+b-a-1))
for i in hang:
#print(hang)
sheet1.cell(row=i,column=4,value=file)#column=4 需要根据实际情况更改
# 此循环为 生成一列,将表名作为数据追加到列中
workbook1.save('C:/Users/Administrator/Desktop/汇总.xlsx')
附记
#定位含有某字符串的单元格
cell = sheet['A']
for i in cell:
if i.value == '序号':
a = i.row
print(a)
elif '填表' in str(i.value): #查找含有填表字符串的位置
b = i.row
print(b)
附记
#将非xlsx格式表转成xlsx
path = 'C:/Users/Administrator/Desktop/汇总excel/'#需要汇总表的文件夹位置
file_list = os.listdir(path) # 获取这个文件夹下所有的excel文档。
for file in file_list:
file_name,suff=os.path.splitext(file)
if suff =='xls':
data=pd.DataFrame(pd.read_excel(path+"/"+file))
data.to_excel(path+"/"+file_name+".xlsx",index=False)
if os.path.splitext(file)[1]=='.xlsx': #获取所有xlsx的文件
怎么将同一个文件夹下的多个EXCEL文件合并到一个EXCEL里? 用宏可以很方便的实现如下:Sub UnionWorksheets()
Application.ScreenUpdating = False
Dim dirname As String
Dim nm As String
nm = ActiveWorkbook.Name
dirname = Dir("E:\123\*.xls")
Cells.Clear
Do While dirname <>""
If dirname <>nm Then
Workbooks.Open Filename:="E:\123\" &dirname
Workbooks(nm).Activate '复制新打开工作簿的第一个工作表的已用区域到当前工作表
Workbooks(dirname).Sheets(1).UsedRange.Copy _
Range("A65536").End(xlUp).Offset(1, 0)
Workbooks(dirname).Close False
End If
dirname = Dir
Loop
End Sub
新建一个EXCEL工作簿,打开开发工具里面的 Visual Basic 把上面的代码复制进去,然后根据下面的提示适当修改即可。
其中的 dirname = Dir("E:\123\*.xls")
Workbooks.Open Filename:="E:\123\" &dirname
是文件夹的路径,根据自己电脑的文件夹路径修改就可以。
Range("A65536").End(xlUp).Offset(1, 0)
这个A65536是行数,因为考虑是03版的所以用了这个,行数也是可以自己调大的。
这个宏可以实现 汇总同一个文件夹下的所有工作薄的功能。
如何将同一文件夹下的所有Excel表格合并到一个表格中
1、新建一个文件夹、将要合并的表格放到里面、新建一个excel工作薄、用excel打开、右击Sheet1标签;
2、选择查看代码(PS:excel有着一项,WPS没有)
3、将下列代码复制到文本框中:
Sub 合并搜索当前目录下所有工作簿的全部工作表()Dim MyPath, MyName, AWbNameDim Wb As workbook, WbN As StringDim G As LongDim Num As LongDim BOX As StringApplication.ScreenUpdating = FalseMyPath = ActiveWorkbook.PathMyName = Dir(MyPath &"\" &"*.xls")AWbName = ActiveWorkbook.NameNum = 0Do While MyName <>""If MyName <>AWbName ThenSet Wb = Workbooks.Open(MyPath &"\" &MyName)Num = Num + 1With Workbooks(1).ActiveSheet.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)For G = 1 To Sheets.CountWb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)NextWbN = WbN &Chr(13) &Wb.NameWb.Close FalseEnd WithEnd IfMyName = DirLoopRange("B1").SelectApplication.ScreenUpdating = TrueMsgBox "共合并了" &Num &"个工作薄下的全部工作表。如下:" &Chr(13) &WbN,vbInformation, "提示"End Sub
4、点击运行、一段时间(取决于表格的大小和多少)后,合并完成了。
如何多个excel文件合并到一个文件多个sheet
需要用到VBA代码。
Sub Books2Sheets()'定义对话框变量Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker)'新建一个工作簿 Dim newwb As Workbook Set newwb = Workbooks.Add With fdIf.Show = -1 Then '定义单个文件变量 Dim vrtSelectedItem As Variant '定义循环变量 Dim i As Integer i = 1 '开始文件检索 For Each vrtSelectedItem In .SelectedItems'打开被合并工作簿 Dim tempwb As Workbook Set tempwb = Workbooks.Open(vrtSelectedItem)'复制工作表 tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i) '把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsxnewwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xls", "")'关闭被合并工作簿 tempwb.Close SaveChanges:=Falsei = i + 1Next vrtSelectedItemEnd If End With Set fd = NothingEnd Sub
具体方法请参考:
将多个excel文件合并到一个excel的多个sheet_百度经验
:jingyan.baidu./article/6181c3e0bd6274152ef1531e.
如何快速将多个文件夹下内容合并到一个文件夹下
建一个文件夹,把其他文件夹全部考进去,然后点该文件夹选搜索,这样所有文件都列出来了,把这些文件剪切然后到在该文件夹黏贴,这样所有文件都在这个文件夹了,其他文件夹就会变成空文件夹,可以选择删除。
怎样把多个excel文件合并到一个文件中
1、新建一个文件夹、将要合并的表格放到里面、新建一个表格、用excel打开、右击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、点击运行、一段时间(取决于表格的大小和多少)后,合并完成了。
多个txt文件合并到一个excel的不同sheet
Sub ImportingText()
Dim MyDir As Object
Dim MyDate As Object
Dim i, j, k As Integer
Const ForReading = 1
i = 1
Sheet2.UsedRange.ClearContents
Sheet3.UsedRange.ClearContents
Set MyDir = CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path &"log\")
Set MyFile = MyDir.Files
For Each File In MyFile
s = File.Name
Sheet2.Cells(i, 1) = s
i = i + 1
Next
Set MyDir = Nothing
Sheet2.Select
End Sub
这个是将某个目录下所有文件名读取的vba,你稍微改改就好了
题意理解:希望批量提取所有文件(注:特定某类文件),并批量建立超链接,当发给对方时,对方可以直接打开文件(注:双方对于文件路径均有共享权)
解法(该解法针对批量提取某类特定文件或所有文件,并批量建立超链接):
一. 批量提取文件
方法一. 微软WIN 8或者WIN 10 *** 作系统,可以借助自带功能实现批量获取文件夹内文件路径:选择全部文件或某类文件,同时按住shift和鼠标右键,会出现“复制为路径”的选项。
WIN 8或者WIN 10 *** 作系统获取文件路径
然后将路径粘贴到Excel中:
路径粘贴到Excel中
方法二. 没有“复制至路径”功能的微软电脑 *** 作系统,可以通过文件内容为“dir *.xlsx/s/on/b>文件路径dirxlsxsonb.txt”的.bat文件" highlight="true">bat文件获得,步骤如下:
1. 在欲得到文件路径的文件夹内新建一个txt文件
2. 在该文件内输入内容为“dir /s/on/b>获取路径.txt”
3. 该文件保存后改后缀为“.bat”
4. 运行该 bat 文件
5. 在“xlsx文件路径.txt”中复制所有内容
6. 粘贴在 Excel 文件中
7. 以“简历表”所有文件为例(若是“dir”改成“dir *.xlsx”则提取所有 xlsx文件的路径)
● 在“简历表”文件夹内新建一个TXT文档;
● 输入内容:“dir /s/on/b>获取路径.txt”;
● 保存后关闭,将txt文档后缀名改为.bat
● 双击生成的bat文件运行,将得到一个命名为“获取路径.txt”文件,打开后,可看到文件列表路径,复制到Excel中即可。
“简历表”文件夹内所有文件
二. 批量超链接
1. 在粘贴了文件路径的 Excel 文件内,在含文件路径的文件名单元格的相邻单元格内键入公式“=Hyperlink(Link-location,[Friendly-name])”
2. 以“简历表”的路径为例(注:公式中的“[Friendly-name]”即“A2”可以省去)
批量超链接公式
三. 针对题述要求的解法
1. 从图片上看,题述文件所在电脑 *** 作系统应该是 win7,所以可以用上述“批量提取文件”的“方法一”,即:
2. 在“A0101板材类”文件夹下,选取所有 .xlsx 文件,同时按住shift和鼠标右键,当出现“复制为路径”的选项时,鼠标左键点击该选项。
3. 在 Excel 文件内粘贴后,在其右边相邻的单元格内,键入公式“=Hyperlink(Link-location,[Friendly-name])”并下拉
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)