Python 谷歌文档格式化,将文本转换为表单
我成功地将google文档文件发送到google sheets中,电子表格能够正确填写(它将文本格式化为表格,非常整洁) 下面是我如何格式化文本的示例:Python 谷歌文档格式化,将文本转换为表单,python,formatting,google-docs,file-conversion,pydrive,Python,Formatting,Google Docs,File Conversion,Pydrive,我成功地将google文档文件发送到google sheets中,电子表格能够正确填写(它将文本格式化为表格,非常整洁) 下面是我如何格式化文本的示例: 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
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,PRICE,STOCK,ASDF,BASDF,CASDF”和“ID,FLAVOR”列,故意将它们留空)
通过在单元格中填充:
=IMPORTDATA("<<< <<<google drive url containing text goes here, just copy-paste>>> >>>")
第2页:
ID, PRICE, STOCK, ASDF, BASDF, CASDF,
第3页:
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:我需要用python编写代码,因为我正在使用pydrive上传文件
编辑:由@Tanaike解决。 寻找@Tanaike解决方案的重要调试:
- 必须使用列表格式设置作用域,每个url位于不同的列表索引中
- 确保.txt的格式为每页两个\n,下一行为一个\n
- 如果由于任何原因您的凭据无效,请在开始恐慌之前重新检查“credentials.json”或“client_secrets.json”
- 您有一个如下所示的文本文件。此文本文件放在您的Google驱动器中。您知道文本文件的文件ID
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,
- 表1
- 当我看到您的文本数据时,我认为数据可以解析为CSV数据
- 在这里,文本数据是分开的,以便放在每张纸上
- 在这里,每个数据都放在单独的工作表中
- 此时,请将文本文件的文件ID设置为
fileId
myFunction()
的函数。
- 运行脚本时,将打开授权屏幕。所以请授权范围
- 在此示例脚本中,将创建新的电子表格,并将数据放入每个工作表中。当然,数据可以放在现有的电子表格中。在这种情况下,需要修改脚本
- 您希望通过使用带有python的google api python客户端来实现上述目标
- 您已经能够使用python使用驱动器API和工作表API
- 运行脚本时,将从Google Drive检索数据,并创建新的电子表格。在这种情况下,这些值将以“用户输入”的形式放入电子表格中。通过这种方式,可以将值解析为字符串、数字和日期。而且,不使用字符顶部的单引号
- 关于
,请检查credentials=creds
https://www.googleapis.com/auth/spreadsheets
和https://www.googleapis.com/auth/drive
到您的范围。请删除凭证文件(如果使用Quickstart,请删除token.pickle
),包括访问和刷新令牌。请运行脚本,再次授权作用域。@5Daydreams谢谢您的回复。给您带来不便,我深表歉意。我可以理解并复制你的情况。所以我更新了脚本。你能确认一下吗?
ID, FLAVOR,
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);
})
}
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)