使用 google 电子表格 api 转义文本

迭戈·西尔维拉

我正在使用谷歌电子表格 api 来更新几个电子表格中的数据,我需要转义一些文本才能在以下公式中使用它们:

=IFNA(FILTER('Another_SheetName'!B:B, 'Another_SheetName'!A:A=92433), HYPERLINK(url, "some_text"))

Another_SheetName我使用电子表格 api 获得的另一张工作表的名称和some_text我想要放置的文本在哪里,我有以下两个问题

  1. 如果some_text有双引号 ( "),我会收到公式解析错误。我可以some_text在单元格 A1 中解决这个问题,然后将公式更改为=HYPERLINK(url, A1),但我想知道是否有一种通用的方法来转义文本some_text以在公式中使用它,这样就不需要使用额外的单元格。
  2. 如果Another_SheetName可以有一个单引号 ( '),我会得到一个未解决的工作表名称。'我可以通过''每次替换来解决这个问题Another_SheetName,但是我需要考虑另一种情况?或者有一种方法可以将文本转义Another_SheetName以在公式中使用它=FILTER('Another_SheetName'!B:B, 'Another_SheetName'!A:A=92433)

是一个例子。

我使用以下代码更新工作表:

c = '''=IFNA(FILTER('Another' SheetName'!B:B, 'Another' SheetName'!A:A=92433), HYPERLINK(url, "some" text"))'''
batch_request = {'requests': [
    {'updateCells': {
        'start': {'sheetId': sheetId, 'rowIndex': i, 'columnIndex': i},
        'rows': [
            {'values': [{'userEnteredValue': {'numberValue': 1}}, {'userEnteredValue': {'stringValue': 'asd'}}]},
            {'values': [{'userEnteredValue': {'formulaValue': c}}, {'userEnteredValue': {'formulaValue': c}}]}
        ],
        'fields': 'userEnteredValue'
    }}
]}
serviceSheet = googleapiclient.discovery.build('sheets', 'v4', credentials=credentials)
serviceSheet.spreadsheets().batchUpdate(spreadsheetId=spreadsheetId, body=batch_request).execute()

谢谢您的帮助!!


更新

我决定用一个更简单的例子来详细说明第一个问题中的问题。问题是我有一个带有双引号 ( ") 的文本,如果我使用以下代码,我会得到一个Formula parsing error.

url = 'https://stackoverflow.com/'
some_text = 'some "text'
c = f'=HYPERLINK("{url}", "{some_text}")'
batch_request = {'requests': [
    {'updateCells': {
        'start': {'sheetId': sheetId, 'rowIndex': 0, 'columnIndex': 0},
        'rows': [
            {'values': [{'userEnteredValue': {'formulaValue': c}}]}
        ],
        'fields': 'userEnteredValue'
    }}
]}
serviceSheet = googleapiclient.discovery.build('sheets', 'v4', credentials=credentials)
serviceSheet.spreadsheets().batchUpdate(spreadsheetId=spreadsheetId, body=batch_request).execute()

我发现解决这个问题的方法是some_text在给定的单元格中插入内容,例如A1,然后在上面的公式中引用它。像这样的东西:

url = 'https://stackoverflow.com/'
some_text = 'some "text'
c = f'=HYPERLINK("{url}", A1)'
batch_request = {'requests': [
    {'updateCells': {
        'start': {'sheetId': sheetId, 'rowIndex': 0, 'columnIndex': 0},
        'rows': [
            {'values': [{'userEnteredValue': {'stringValue': some_text}}, {'userEnteredValue': {'formulaValue': c}}]},
        ],
        'fields': 'userEnteredValue'
    }}
]}
serviceSheet = googleapiclient.discovery.build('sheets', 'v4', credentials=credentials)
serviceSheet.spreadsheets().batchUpdate(spreadsheetId=spreadsheetId, body=batch_request).execute()

但是有一种方法可以在不使用另一个单元格的情况下解决这个问题吗?

Tanaike

我相信你的目标如下。

  • 在您的问题中,Another_SheetName用作工作表名称。但是从你的放映脚本来看,Another' SheetName是使用的。另外,从If Another_SheetName can have a single quote (') I get an Unsolved Sheet Name.,我认为您的工作表名称可能包含单引号。

例如,当='Another_SheetName'!B:B放在一个单元格中时,似乎单引号会被自动删除。例如,当='Another SheetName'!B:B放在一个单元格中时,似乎没有删除单引号。手动放置和通过 Sheets API 放置都会出现这种情况。

并且,例如,当='Another' SheetName'!B:B使用时,会发生参考错误。在这种情况下,它必须是='Another'' SheetName'!A1

从这些结果来看,下面的修改怎么样?

修改后的脚本:

从:

c = '''=IFNA(FILTER('Another' SheetName'!B:B, 'Another' SheetName'!A:A=92433), HYPERLINK(url, "some" text"))'''

至:

  • 在这种情况下,'被替换''并使用它。当这个脚本运行时,=IFNA(FILTER('Another'' SheetName'!B:B, 'Another'' SheetName'!A:A=92433), HYPERLINK("https://stackoverflow.com", "some_text"))被放到一个单元格中。

      url = "https://stackoverflow.com"
      sheetName = "Another' SheetName"
      sheetName = sheetName.replace("'", "''")
      c = f"=IFNA(FILTER('{sheetName}'!B:B, '{sheetName}'!A:A=92433), HYPERLINK(\"{url}\", \"some_text\"))"
    
  • 在这种情况下,INDIRECT使用。当这个脚本运行时,=IFNA(FILTER(INDIRECT("'Another' SheetName'!B:B"), INDIRECT("'Another' SheetName'!A:A")=92433), HYPERLINK("https://stackoverflow.com", "some_text"))被放到一个单元格中。

      url = "https://stackoverflow.com"
      sheetName = "Another' SheetName"
      c = f'=IFNA(FILTER(INDIRECT("\'{sheetName}\'!B:B"), INDIRECT("\'{sheetName}\'!A:A")=92433), HYPERLINK("{url}", "some_text"))'
    

添加:

关于您更新的问题,

当您想使用以下脚本时,

some_text = 'some "text'
c = f'=HYPERLINK("{url}", "{some_text}")'

下面的修改呢?

some_text = 'some "text'.replace('"', '""')
c = f'=HYPERLINK("{url}", "{some_text}")'

在此修改中,"替换为""这样,some "text可以使用的文本。

顺便说一句,关于您的以下第二个脚本,公式被放在单元格“A1”中。但是,该公式使用单元格“A1”的值。在这种情况下,公式不起作用。请注意这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Google Sheets API公开电子表格?

使用 PHP API 在 Google Drive 电子表格中对表格进行排序

使用Python使用Google API将电子表格复制到另一个电子表格

使用Google API向Google电子表格“写入”时出错

在Java的Google驱动器中使用Google Spreadsheet API创建电子表格

使用Google云端硬盘中的Google Spreadsheets API创建电子表格

无法使用python通过Google Drive API下载Google电子表格

使用Google Sheets API V4 API密钥创建电子表格

使用 Java 和 Google Drive API 创建一个空电子表格

无法使用Google Sheets API创建新的电子表格

使用Google云端硬盘API从文件夹下载电子表格

如何使用API在新的Google电子表格中创建第一行?

使用Google Docs API电子表格作为Ember数据存储区?

使用Google Sheet API在电子表格中添加(创建)新工作表

使用API向Google电子表格中添加多行

如何使用 php google api 更改电子表格的列宽

如何使用 Google Sheets API 和 Python 更新电子表格属性?

如何使用Google Spreadsheet API在电子表格文件中插入超链接

使用Google Appscript将数据从API提取到电子表格

使用Google API恢复特定版本的电子表格

使用Drive API访问Google Drive电子表格

Google App Script - 使用 fetch 循环获取 API 响应并写入电子表格

如何使用HtmlService将值从Google电子表格检索到文本字段

无法使用Google电子表格API V4.0更新单元格的Google表格值

下载 Google 电子表格 Google API PHP

如何使用Google Photos API方法:电子表格的Google Apps脚本中的mediaItems.search

如何通过Python API使用Google Drive v3 API限制编辑者共享电子表格?

使用RGoogleDocs登录到Google电子表格

使用http请求更新Google电子表格