Python Соскоб кодировки формул Excel - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь записать сайты в CSV и работать с этими данными, но текстовые формулы не будут работать должным образом. Я действительно не понимаю, что делаю неправильно, но я думаю, что это часть кодирования.

Это часть python:

        page = requests.get(url)
        encoding = page.encoding if 'charset' in page.headers.get('content-type', '').lower() else None
        soup = BeautifulSoup(page.content, 'html.parser', from_encoding=encoding)
        example = soup.find(class_= htmlClass).get_text()
        example = "".join([s for s in example.splitlines(True) if s.strip()])
        example = example.splitlines()
        outputList.append(example)

[...]

    with open(outputFile, "w") as fileHandle:
        fileHandle.writelines(outputFileData)

Текст в csv выглядит нормально, но если я пытаюсь получить некоторые формулы MATCH, он часто не находит данные. =MATCH("*13 MARCH*";F1:F20;0) даст N / A, пока в столбце есть текст 13 МАРТА.

Я сделал много изменений и проверил, и я заметил, что когда я использую это: with codecs.open(outputFile, "w", "utf-8") as fileHandle: У меня есть специальные символы в CSV-файл, и это, вероятно, объясняет, что формулы MATCH неправильно находят текст.

Если это помогает, я фактически импортирую CSV-файл в googlesheet с помощью сценария, а затем работаю с формулами MATCH, сценарий:

function importFromCSV() {
  var file = DriveApp.getFilesByName("menulist.csv");
  var csvFile = file.next().getBlob().getDataAsString();
  var csvData = Utilities.parseCsv(csvFile, ";");
  var ss = SpreadsheetApp.openById("xxx");
  var sheet = ss.getSheetByName('import');
  sheet.getRange('A7:AZ60').clear()
  sheet.getRange(7,1, csvData.length, csvData[0].length).setValues(csvData);
}

У меня были рубины с вышеприведенным и я добавил var csvFile = file.next().getBlob().getDataAsString('ISO-8859-1');, чтобы избежать рубинов, но формула MATCH по-прежнему не работает.

И идея, что я делаю не так с кодировкой?

1 Ответ

1 голос
/ 21 апреля 2020

Попробуйте использовать, надеюсь, это решит вашу проблему

with codecs.open(outputFile, "w", "utf-8-sig") as fileHandle:
...