首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google文档格式,将文本转换为工作表

Google文档格式,将文本转换为工作表
EN

Stack Overflow用户
提问于 2020-01-21 18:54:01
回答 1查看 869关注 0票数 2

我已经成功地将一个google文档文件发送到google表中,而电子表格成功地将自己填入了一个正确的表格(它将文本格式化为一个表,非常整洁)

下面是我如何格式化文本的一个示例:

代码语言:javascript
运行
复制
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,风味“作为它们的列,它们是故意留下空白的)

通过在单元格中填充以下内容:

代码语言:javascript
运行
复制
=IMPORTDATA("<<< <<<google drive url containing text goes here, just copy-paste>>> >>>")

我能够创建几个表,其中选定的单元格是第一个表的左上角,该命令会自动将它们全部放入google格式。每个表都放在前面的表下面,从列名开始。

我正在寻找一种将每个表放在不同的google页面中的方法,比如:

page1:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
ID, PRICE, STOCK, ASDF, BASDF, CASDF,

page3:

代码语言:javascript
运行
复制
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”。

我想再次感谢@Tanaike,感谢他对我的解决方案的耐心和奉献,以及他对调试它的帮助。

EN

Stack Overflow用户

回答已采纳

发布于 2020-01-21 23:38:01

  • 您有如下所示的文本文件。这个文本文件放在你的谷歌驱动器中。您知道文本文件的文件ID。 ID,姓名,移动,城市,国家,生日,3,NameGoesHere1,21 98658 5548,RPG,countryNameHere,1998-05-02,6,SomeoneElse加入这里,21 98535 1218,远地,1989-11-15,5,AnotherCustomer,21 85482 5245,体态,某处,1999-08-04,ID,价格,股票,ASDF,BASDF,ASDF,ID,名字,价格,描述,2,笔,1.5,笔比剑更强大,3,铅笔,1.0,可以用来写,4,RPG,150.0,嗯,很快就升级了,嗯,空的,名字,傻瓜,ID,味道,
  • 您希望将每个空行的文本数据分隔到单个工作表中。
代码语言:javascript
运行
复制
- Tab 1

ID,姓名,移动,城市,国家,生日,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脚本来实现你的目标。

流动:

此示例脚本的流程如下所示。

  1. 从文本文件中检索文本数据。
  2. 解析文本数据。
    • 当我看到您的文本数据时,我认为这些数据可以被解析为CSV数据。
    • 在这里,将文本数据分开,以便放入每个工作表。

  1. 创建新的电子表格。
  2. 将分析过的数据放到新的电子表格中。
    • 在这里,每个数据都放在单独的工作表中。

用法:

  1. 将以下示例脚本复制并粘贴到Google脚本的脚本编辑器中。
    • 此时,请将文本文件的文件ID设置为fileId

  1. 运行myFunction()函数。
    • 运行脚本时,将打开授权屏幕。所以请授权范围。

这样,剧本就能工作了。

示例脚本:

代码语言:javascript
运行
复制
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);
  })
}

注意:

  • 在此示例脚本中,将创建新的电子表格,并将数据放入每个工作表。当然,数据可以放到现有的电子表格中。在这种情况下,需要修改脚本。

参考文献:

如果我误解了你的问题,而这不是你想要的方向,我道歉。

添加:

  • 您希望使用带有python的google来实现上述目标。
  • 您已经能够使用python使用Drive和Sheets。

我能像上面那样理解。在本例中,使用了Drive和Sheets。驱动器API从Google上的文本文件中检索数据。Sheets使用这些值创建新的电子表格。在本例中,为了使用Sheets,我使用了google。在此,我还在中使用了Drive。

示例脚本

代码语言:javascript
运行
复制
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检索数据,并创建新的电子表格。在本例中,值被放入带有"USER_ENTERED“的电子表格中。这样,可以将值解析为字符串、数字和日期。此外,没有使用字符顶部的单引号。
  • 关于credentials=creds,请查看python的Quickstart
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59847515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档