我已经成功地将一个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,风味“作为它们的列,它们是故意留下空白的)
通过在单元格中填充以下内容:
=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.:我需要代码在python中,因为我正在使用pydrive来上传文件。
编辑:由@Tanaike解决。的重要调试以寻找@Tanaike的解决方案:
我想再次感谢@Tanaike,感谢他对我的解决方案的耐心和奉献,以及他对调试它的帮助。
发布于 2020-01-21 23:38:01
- Tab 1ID,姓名,移动,城市,国家,生日,3,NameGoesHere1,21 98658 5548,04,,countryNameHere,1998-05-02,6,SomeoneElse加入这里,21 98535 1218,远地,1989年-11-15,5,AnotherCustomer,21 85482 5245,沉静,某处,1999-08-04,
-表2
ID,价格,股票,ASDF,BASDF,CASDF,
- ...
-表5
身份,味道,
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一。
问题和解决办法:
我认为你的目标很难实现,或者仅仅通过电子表格的内置功能是无法实现的。所以在这个答案中,我建议使用Google脚本来实现你的目标。
流动:
此示例脚本的流程如下所示。
用法:
fileId。
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);
})
}注意:
参考文献:
如果我误解了你的问题,而这不是你想要的方向,我道歉。
添加:
我能像上面那样理解。在本例中,使用了Drive和Sheets。驱动器API从Google上的文本文件中检索数据。Sheets使用这些值创建新的电子表格。在本例中,为了使用Sheets,我使用了google。在此,我还在中使用了Drive。
示例脚本
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)credentials=creds,请查看python的Quickstart。https://stackoverflow.com/questions/59847515
复制相似问题