【问题标题】:Open a Workbook with XLWINGS without making it visible使用 XLWINGS 打开工作簿而不使其可见
【发布时间】:2016-12-24 00:45:41
【问题描述】:

我开始使用 XLWings(我根本不喜欢 Excel,但这是我必须做的事情)。问题是我找不到让 Python 打开工作簿而不显示它的方法。

似乎旧 XLWings 0.6.4 中工作簿的构造函数是 xlwings.Workbook,其中一个参数是标志“app_visible”(参见 http://docs.xlwings.org/en/v0.6.4/api.html)。

但是,在新的 v0.9.2 Workbook 中已被 Book 取代,并且 Book 没有任何此类标志 (http://docs.xlwings.org/en/stable/api.html)。 App 对象确实有它,我认为这是要走的路。所以我编码了:

import xlwings as xw

app = xw.App(visible=False)
filename = os.path.join(PATH_EXCEL_SAMPLES, r"rangosConDatos_sample01.xls")
book = xw.Book(filename)
# Do stuff with the info in the book
book.close()  # Ya puedo cerrar el libro.
app.kill()

但是,很遗憾,当

book = xw.Book(filename)

执行后app的'visible'属性突然变为True,显示书本。我不知道这是期望的功能还是意外的行为。无论如何,有什么想法我应该怎么做?

【问题讨论】:

  • 现在我会说这是一个错误。像这样打开这本书有用吗? app.books.open(filename)
  • @Felix 我试过了,但效果完全一样。
  • @Felix 我看到你修好了,谢谢!
  • 是的,v0.9.3 已修复,感谢提及

标签: python excel visibility xlwings


【解决方案1】:

这是我的工作代码片段:

    import xlwings

    excel_app = xlwings.App(visible=False)
    excel_book = excel_app.books.open('PATH_TO_YOUR_XLSX_FILE')
    excel_book.save()
    excel_book.close()
    excel_app.quit()

【讨论】:

    【解决方案2】:

    你也可以试试:

    import xlwings as xw
    
    app = xw.App(visible=False)
    book = xw.Book('PATH_TO_YOUR_XLSX_FILE')
    sheet = book.sheets('sheetname')
    df = sheet.range('A1:D10')
    book.close()
    app.quit()
    

    #纠正错字

    【讨论】:

      【解决方案3】:

      你可以试试'with open',例如

      with open ("write.csv", "a", newline='') as file:  
          fields=['score', 'name']                       
          writer=csv.DictWriter(file, fieldnames=fields)
          writer.writerow({'score' : score, 'name' : username})
      
      with open ("write.csv", "r") as file:
          sortlist=[]
          reader=csv.reader(file)
          for i in reader:
              sortlist.append(i)
      

      【讨论】:

        【解决方案4】:

        从 0.24.3 版开始,实现了with xw.App,惯用的方式是:

        import xlwings as xw
        
        with xw.App(visible=False) as app:
            book = xw.Book("test.xlsx")
        
            # Do some stuff e.g.
            book.sheets[0]["A1"].value = 12345
        
            book.save("test.xlsx")
            book.close()
        

        这样做的好处是,如果您使用隐藏实例并且您的代码失败,则不会在后台留下任何隐藏的 Excel 进程。

        【讨论】:

          【解决方案5】:

          这对我有用:

          import xlwings as xw
          
          app = xw.App(visible=False)
          readsheet = xw.Book('FILE_PATH').sheets['Sheet1']
          df = pd.DataFrame(readsheet.range('A1', 'Z99').value)
          

          【讨论】:

            猜你喜欢
            • 2020-05-24
            • 2017-07-30
            • 1970-01-01
            • 2017-11-09
            • 2018-11-20
            • 1970-01-01
            • 1970-01-01
            • 2021-05-19
            • 2022-01-09
            相关资源
            最近更新 更多