我尝试使用将自动筛选器应用到现有工作表,但是该过程在自动筛选器行上一直失败。我在网上做了很多研究,找不到为什么我无法正常工作,或者是否有其他选择。谁能帮忙吗? (P.S.我也尝试过使用win32com [示例:ws_win32.AutoFilter(),但这也不起作用)
我的示例代码:
def _set_autofilter(self):
wb_xlsw = xlsxwriter.Workbook('ExistingWorkbook.xlsb')
ws_xlsw = wb_xlsw.get_worksheet_by_name('Data')
ws_xlsw.autofilter('A1:D19904')
答案 0 :(得分:0)
如果您尚未在XlsxWriter中创建一个工作表,则将无法get_worksheet_by_name()
使用该名称的工作表。
如果您尝试读取现有文件,则无法使用XlsxWriter做到这一点。它只会创建新文件。
答案 1 :(得分:0)
您可以只停留在win32com中以实现此目的:
data = [{"test1": 1, "test2": 1}, {"test1": 2, "test2": 2}, {"test1": 3, "test2": 3}, {"test1": 4, "test2": 4}]
import win32com.client as win32
def openExcel():
xl = win32.gencache.EnsureDispatch('Excel.Application')
wb = xl.Workbooks.Add()
ws = wb.Sheets(1)
xl.Visible = True
return ws
def print2Excel(datapoint:dict, ws):
print(datapoint)
const = win32.constants #.Insert()-Methods keywargs are packaged into const.
ws.Range("A2:B2").Insert(const.xlShiftDown, const.xlFormatFromRightOrBelow)
ws.Cells(2,1).Value = datapoint["test1"]
ws.Cells(2,2).Value = datapoint["test2"]
def setAutoFilter(ws):
ws.Range("A:A").AutoFilter(Field=1, Criteria1=3)
def main():
ws = openExcel()
ws.Cells(1,1).Value = "test1"
ws.Cells(1,2).Value = "test2"
for datapoint in data:
print2Excel(datapoint, ws)
setAutoFilter(ws)
main()
不过,我似乎无法获得自动筛选的条件以使用数组。 ws.Range(“ A:A”)。AutoFilter(Field = 1,Criteria1 = [1,3])将运行,但仅过滤列表(3)中的最后一项。 而VBA语法ws.Range(“ A:A”)。AutoFilter(Field = 1,Criteria1 = Array(1,3))将触发异常。