【问题标题】:How to read visible-only cells using Python?如何使用 Python 读取仅可见单元格?
【发布时间】:2020-02-20 07:30:00
【问题描述】:

我只想读取和合​​并 Excel 中的可见单元格,但我失败了。

另外,我尝试过openpyxl,但没有成功。 (找到我的第二个代码)

还有其他方法可以只读取可见单元格并粘贴到新的 excel 上吗?

我只想读取可见单元格,因为有时它们需要被过滤或隐藏。

请多多指教。

我应该放入什么样的模块?

如果每个 excel 模块都不能做到这一点,也请告诉我。

我当前的代码:

import os
import glob
import xlwings as xw
import xlrd
import xlsxwriter


xw.App().visible = False
path = os.getcwd()
x=input('name:') + '.xlsx'
target_xls = os.path.join(path,x)
data = []
for file in glob.glob(path+'\*.*'):
    if file.endswith((".xls", ".xlsm", ".xlsx")):

        wb = xlrd.open_workbook(file)
        for sheet in wb.sheets():
            for rownum in range(sheet.nrows):
                data.append(sheet.row_values(rownum))
        workbook = xlsxwriter.Workbook(target_xls)
        worksheet = workbook.add_worksheet()
        for i in range(len(data)):
            print(range(len(data)))
            for j in range(len(data[i])):
                worksheet.write(i, j, data[i][j])
        workbook.close()

我的openpyxl代码:

import os
import glob
import xlwings as xw
import xlrd
import xlsxwriter


from openpyxl import load_workbook
xw.App().visible = False
path = os.getcwd()
x = input('name:') + '.xlsx'
target_xls = os.path.join(path, x)
data = []
wb = load_workbook('sample.xlsx') 
ws = wb['Sheet1']

for row in ws:

    if ws.row_dimensions[row[0].row].hidden == False:
        for cell in row:
            data.append(cell.value)
    workbook = xlsxwriter.Workbook(target_xls)
    worksheet = workbook.add_worksheet()

    for i in range(len(data)):
        print(range(len(data)))
        for j in range(len(data[i])):
            worksheet.write(i, j, data[i][j])
    workbook.close()

我想像下面这样阅读excel:

并输出到:

【问题讨论】:

    标签: excel python-3.x xlrd


    【解决方案1】:
    #Reference: xlrd manual: https://media.readthedocs.org/pdf/xlrd/latest/xlrd.pdf
    #Python Forum Reference: https://python-forum.io/Thread-Identify-Hidden-rows-in-xls
    import xlrd
    
    print("Read the VALUE and ROW VISIBILITY from cells A1:A6 in a .xls file from 'Sheet2'.")
    print()
    
    ######################################################
    # Access .xls file (Excel 2003 and before)
    excel_filename = "HiddenRow3OnSheet2.xls"
    
    # Open the workbook
    #NOTE: Traceback error if 'formatting_info=True' is NOT INCLUDED
    xl_workbook = xlrd.open_workbook(excel_filename, formatting_info=True)
    
    #Set the focus on 'Sheet2'
    my_sheet_name = "Sheet2"
    xl_sheet = xl_workbook.sheet_by_name(my_sheet_name)
    
    print("File: {}".format(excel_filename))
    for irow in range(xl_sheet.nrows):
        ihidden = xl_sheet.rowinfo_map[irow].hidden   #Row Visibility 0=Visible 1=Hidden
        if ihidden == True:
            shidden = "VISIBLE"
        else:
            shidden = "HIDDEN"
    
        svalue = xl_sheet.cell(irow,0).value
        print("Value: {}        Row Visibility: {}".format(svalue, shidden))
    
    
    ######################################################
    # Access .xlsx file (Excel 2007 and later)
    excel_filename = "HiddenRow3OnSheet2.xlsx"
    
    # Open the workbook
    #NOTE: 'formatting_info=True' is NOT SUPPORTED for .xlsx files
    xl_workbook = xlrd.open_workbook(excel_filename)
    
    #Set the focus on 'Sheet2'
    my_sheet_name = "Sheet2"
    xl_sheet = xl_workbook.sheet_by_name(my_sheet_name)
    
    print()
    print("File: {}".format(excel_filename))
    for irow in range(xl_sheet.nrows):
        svalue = xl_sheet.cell(irow,0).value
        print("Value: {}       Row Visibility: {}".format(svalue, "Not Available for .xlsx files"))
    

    【讨论】:

    • 所以我不能将它用于 .xlsx 文件类型?以及如何像我的第二张照片一样将其写入新的 excel 中?
    • 文档说现在只支持.xls
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多