Ошибка EOF со статическим методом для класса xlworkbook - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь открыть защищенные паролем книги Excel и нашел код, который я разместил ниже на этой странице , но когда я пытаюсь это сделать, я получаю sytaxError и indentationEorror

xlpassword.py


import xlwings as xw
from autoit.autoit import AutoItError
import autoit
import threading

class _WB(object):

  def __init__(self, path, password=None):
    self.path = path
    self.password = password
    self.name = path

  @staticmethod
  def _handlepassword(password):#this line is giving the error
    if password:
      autoit.win_wait_active("[TITLE:Excel]", 5)
      autoit.send(password)
      autoit.send("{ENTER}")


  def op(self):
    try: # If already opened
      autoit.win_activate("%s - Excel"%self.name)
      self.book = xw.Book(self.path)
    except AutoItError: # Else
      t = threading.Thread(target=self._handlepassword, args=(self.password,))
      t.start()
      self.book = xw.Book(self.path)
      t.join()
    finally:
      return self

  def _wait(self):
      autoit.win_wait_active("%s - Excel"%self.name, 1)

  def close(self):
      self._wait()
      self.book.close()
      autoit.win_close("Excel")

, когда я добираюсь до линии def _handlepassword, я получаю вывод

SyntaxError: unexpected EOF while parsing (<string>, line 1)
IndentationError: unexpected indent (<string>, line 1)

Что означает, что когда Я импортирую xlpassword.py в другой сценарий python, новый сценарий не запускается

test_run.py

import pandas as pd
from xlpassword import * #I know this isn't best practice

PATH = "C:\\Path\\to\\my\\file.xlsx"

print(PATH)
wb = _WB(path=PATH, password='MyP8ssw0rd')

Я использую python 3.8 .1 на компьютере windows 10, и я попытался запустить код в spyder, sublime и Rstudio (я обычно работаю в Rstudio, но подумал, что это может быть причиной проблемы.)

I Я читал о классах, методах классов и методах stati c, и я не вижу, что я делаю здесь неправильно, поэтому, если кто-то сможет оказать помощь, это очень поможет.

1 Ответ

1 голос
/ 19 февраля 2020

Начиная с версии v0.16.1, xlwings поддерживает открытие книг, защищенных паролем, из коробки:

import xlwings as xw
wb = xw.Book(password='mypassword')

См. Также справочник по API: https://docs.xlwings.org/en/stable/api.html#xlwings .Book

...