Google docs форматирование, преобразование текстов в листы - PullRequest
2 голосов
/ 21 января 2020

Я успешно отправил файл документов Google на листы Google, и электронная таблица смогла правильно заполнить себя (форматирует текст в таблицу, очень аккуратно)

Ниже приведен пример как я форматирую свой текст:

ID, NAME, MOBILE, CITY, COUNTRY, BIRTHDAY, 
3, NameGoesHere1, 21 98658 5548, abcity, countryNameHere, 1998-05-02, 
6, SomeoneElse Joined Here, 21 98535 1218, whereland, Far far away, 1989-11-15, 
5, AnotherCustomer, 21 85482 5245, somecity, Somewhereland, 1999-08-04, 

ID, PRICE, STOCK, ASDF, BASDF, CASDF,

ID, NAME, PRICE, DESCRIPTION, 
2, pen, 1.5, The pen is mightier than the sword, 
3, pencil, 1.0, Can be used to write, 
4, RPG, 150.0, well that escalated quickly, huh, 

EMPTY, 
names, 
goofs, 

ID, FLAVOR, 

(Обратите внимание, что есть две пустые таблицы, одна с «ID, ЦЕНА, СТОК, ASDF, BASDF, CASDF» и «ID, FLAVOR» в качестве столбцов они специально оставлены пустыми)

Заполнив ячейку:

=IMPORTDATA("<<< <<<google drive url containing text goes here, just copy-paste>>> >>>")

Я могу создать несколько таблиц с выбранной ячейкой, которая находится в верхнем левом углу окна. первая таблица, и эта команда автоматически помещает их в формат листов Google. Каждая таблица расположена ниже предыдущей, начиная с имен столбцов.


Я ищу способ получить каждую таблицу на отдельной странице Google-листа, например:

page1:

ID, NAME, MOBILE, CITY, COUNTRY, BIRTHDAY, 
3, NameGoesHere1, 21 98658 5548, abcity, countryNameHere, 1998-05-02, 
6, SomeoneElse Joined Here, 21 98535 1218, whereland, Far far away, 1989-11-15, 
5, AnotherCustomer, 21 85482 5245, somecity, Somewhereland, 1999-08-04, 

page2:

ID, PRICE, STOCK, ASDF, BASDF, CASDF,

page3:

ID, NAME, PRICE, DESCRIPTION, 
2, pen, 1.5, The pen is mightier than the sword, 
3, pencil, 1.0, Can be used to write, 
4, RPG, 150.0, well that escalated quickly, huh, 

и т. Д.

Я хотел бы знать если есть способ разделить текст на разные страницы, как показано выше, или какой альтернативный способ преобразовать тип файла из текста в листы, чтобы я мог разделить его на разные страницы

ps .: I код должен быть в python, так как я работаю с pydrive для загрузки файлов


edit .: решено @ Tanaike. Важная отладка для обратите внимание на решение @ Tanaike:

  • SCOPE должен быть задан в формате списка, каждый URL в отдельном индексе списка
  • , убедитесь, что ваш .txt отформатирован с two \ n на страницу и один \ n для следующих строк.
  • , если по какой-либо причине у вас неверные учетные данные s, перепроверьте свои «учетные данные. json» или «client_secrets. json», прежде чем начинать пани c.

Я хочу еще раз поблагодарить @Tanaike За его терпение и преданность моему решению и за помощь в его устранении.

1 Ответ

2 голосов
/ 22 января 2020
  • У вас есть текстовый файл, как показано ниже. Этот текстовый файл помещен в ваш Google Drive. Вам известен идентификатор файла текстового файла.

    ID, NAME, MOBILE, CITY, COUNTRY, BIRTHDAY, 
    3, NameGoesHere1, 21 98658 5548, abcity, countryNameHere, 1998-05-02, 
    6, SomeoneElse Joined Here, 21 98535 1218, whereland, Far far away, 1989-11-15, 
    5, AnotherCustomer, 21 85482 5245, somecity, Somewhereland, 1999-08-04, 
    
    ID, PRICE, STOCK, ASDF, BASDF, CASDF,
    
    ID, NAME, PRICE, DESCRIPTION, 
    2, pen, 1.5, The pen is mightier than the sword, 
    3, pencil, 1.0, Can be used to write, 
    4, RPG, 150.0, well that escalated quickly, huh, 
    
    EMPTY, 
    names, 
    goofs, 
    
    ID, FLAVOR, 
    
  • Вы хотите поместить значения на отдельный лист, отделяя текстовые данные в каждой пустой строке.

    • Вкладка 1

      ID, NAME, MOBILE, CITY, COUNTRY, BIRTHDAY, 
      3, NameGoesHere1, 21 98658 5548, abcity, countryNameHere, 1998-05-02, 
      6, SomeoneElse Joined Here, 21 98535 1218, whereland, Far far away, 1989-11-15, 
      5, AnotherCustomer, 21 85482 5245, somecity, Somewhereland, 1999-08-04, 
      
    • Вкладка 2

      ID, PRICE, STOCK, ASDF, BASDF, CASDF,
      
    • ...
    • Вкладка 5

      ID, FLAVOR, 
      

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом, как об одном из нескольких возможных ответов.

Проблема и обходной путь:

Я думал, что ваша цель труднодостижима или может быть невозможна только с помощью встроенного -в функциях электронной таблицы. Поэтому в этом ответе я хотел бы предложить достичь своей цели с помощью Google Apps Script.

Поток:

Порядок выполнения этого примера сценария следующий.

  1. Извлечение текстовых данных из текстового файла.
  2. Анализ текстовых данных.
    • Когда я увидел ваши текстовые данные, я подумал, что данные могут быть проанализированы как данные CSV.
    • Здесь текстовые данные отделяются для размещения на каждом листе.
  3. Создание новой электронной таблицы.
  4. Поместите проанализированные данные в новую электронную таблицу.
    • Здесь все данные помещаются на отдельный лист.

Использование:

  1. Скопируйте и вставьте следующий пример сценария в редактор сценариев Google Apps Script.
    • В это время установите для идентификатора текстового файла значение fileId.
  2. Запустите функцию myFunction().
    • При запуске скрипта открывается экран авторизации. Поэтому, пожалуйста, авторизуйте области.

При этом скрипт работает.

Пример сценария:

function myFunction() {
  var fileId = "###"; // Please set the file ID of text file.
  var newSpreadsheetName = "sampleSpreadsheet"; // Please set new Spreadsheet name.

  var data = DriveApp.getFileById(fileId).getBlob().getDataAsString();
  var temp = [];
  var parsedData = Utilities.parseCsv(data).reduce(function(ar, e, i, d) {
    if (e.join("")) {
      temp.push(e);
    } else {
      ar.push(temp);
      temp = [];
    }
    if (i == d.length - 1) ar.push(temp);
    return ar;
  }, []);
  var ss = SpreadsheetApp.create(newSpreadsheetName);
  parsedData.forEach(function(e, i) {
    var sheet = i == 0 ? ss.getSheets()[0] : ss.insertSheet();
    sheet.getRange(1, 1, e.length, e[0].length).setValues(e);
  })
}

Примечание:

  • В этом примере сценария создается новая электронная таблица и данные помещаются на каждый лист. Конечно, данные могут быть помещены в существующую электронную таблицу. В этом случае требуется изменить скрипт.

Ссылки:

Если я неправильно понял ваш вопрос и это не то направление, которое вы хотите, я извиняюсь.

Добавлено:

  • Вы хотите достичь вышеуказанной цели, используя google-api- python -клиент с python.
  • Вы уже можете использовать Drive API и Sheets API, используя python.

Я мог понять, как выше. В этом случае используются Drive API и Sheets API. Drive API извлекает данные из текстового файла на Google Drive. API Sheets создает новую электронную таблицу, используя значения. В этом случае для использования Sheets API я использовал google-api- python -client. При этом я также использовал Drive API с google-api- python -client.

Пример сценария

fileId = '###'  # Please set the file ID of text file.

sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)

# Retrieve data from Google Drive and parse data as an array.
data = drive.files().get_media(fileId=fileId).execute()
csvData = [row.split(",") for row in str(data, 'utf-8').split("\n")]
ar = []
temp = []
for i, row in enumerate(csvData):
    if "".join(row) != "":
        row = [v.strip() for v in row]
        temp.append(row)
    else:
        ar.append(temp)
        temp = []
    if i == len(csvData) - 1:
        ar.append(temp)

sheetsObj = []
valuesUpdateReq = []
for i, sheet in enumerate(ar):
    if bool(sheet):
        sheetName = "Sheet" + str(i + 1)
        sheetsObj.append({"properties": {"title": sheetName}})
        valuesUpdateReq.append({"values": sheet, "range": sheetName, "majorDimension": "ROWS"})

# Request to Sheets API.
body = {"properties": {"title": "sampleSpreadsheet"}, "sheets": sheetsObj}
res1 = sheets.spreadsheets().create(body=body).execute()
batch_update_values_request_body = {"data": valuesUpdateReq, "valueInputOption": "USER_ENTERED"}
res2 = sheets.spreadsheets().values().batchUpdate(spreadsheetId=res1["spreadsheetId"], body=batch_update_values_request_body).execute()
print(res2)
  • При запуске сценария данные извлекаются из Google Drive и новая электронная таблица создана. В этом случае значения помещаются в электронную таблицу с помощью «USER_ENTERED». Таким образом, значения могут быть проанализированы как строка, число и дата. А также, одиночная кавычка верхней части символа не используется.
  • О credentials=creds, пожалуйста, отметьте Быстрый старт для python.
...