将以下屏幕快照中突出显示的表格从Excel读入Pandas DataFrame的最简单方法是什么?假设我有成千上万个这样的工作表。我要阅读的区域在左上角有“ Col4”,并且没有整个空白行或列。 “ Col4”可以出现在工作表上的任何位置(行,列)。
我想我总是可以采用残酷的方法,首先读取整张纸,找到“ Col4”的位置,然后提取想要的部分。但是我想知道是否有更简单的方法可以做到这一点。
此外,到目前为止,我只与Pandas合作。我知道除了熊猫还有很多其他的软件包,例如xlwings或xlrd。如果您知道这些软件包中的任何一个都可以提供帮助,请告诉我,我们也将不胜感激。
请注意,此问题不是pandas read_excel multiple tables on the same sheet的重复,因为该帖子中的解决方案仅处理事先知道行偏移量的情况。
我要解决的业务问题是读取公司中非工程人员(人力资源,会计等)创建的许多电子表格,但不幸的是,他们没有以一致且易于编程的方式创建电子表格办法。
答案 0 :(得分:0)
Python非常强大,但我认为您不会获得与Excel结合使用所需要的灵活性。也许有人会发布解决方案,但是如果没有,您可以使用VBA来完成此任务,并且当所有内容汇总到一个工作表中时,请使用Python从该单一来源中读取。
Sub CopyRangeFromMultipleSheets()
'Declaring variables
Dim Source As Worksheet
Dim Destination As Worksheet
Dim SourceLastRow, DestLastRow As Long
Application.ScreenUpdating = False
'Looping through all sheets to check whether "Master" sheet exist
For Each Source In ThisWorkbook.Worksheets
If Source.Name = "Master" Then
MsgBox "Master sheet already exist"
Exit Sub
End If
Next
'Inserting a new sheet after the "Main" sheet
Set Destination = Worksheets.Add(after:=Sheets("Sheet1"))
Destination.Name = "Master"
'Looping through all the sheets in the workbook
For Each Source In ThisWorkbook.Worksheets
'Preventing consolidation of data from "Main" and "Master" sheet
If Source.Name <> "Master" Then
SourceLastRow = Source.Range("A1").SpecialCells(xlLastCell).Row
Source.Activate
If Source.UsedRange.Count > 1 Then
DestLastRow = Sheets("Master").Range("A1").SpecialCells(xlLastCell).Row
If DestLastRow = 1 Then
'copying data from the source sheet to destination sheet
Source.Range("D1", Range("T1").SpecialCells(xlLastCell)).Copy Destination.Range("A" & DestLastRow)
Else
Source.Range("D1", Range("T1").SpecialCells(xlCellTypeLastCell)).Copy Destination.Range("A" & (DestLastRow + 1))
End If
End If
End If
Next
Destination.Activate
Application.ScreenUpdating = True
End Sub