我正在使用谷歌电子表格 api 来更新几个电子表格中的数据,我需要转义一些文本才能在以下公式中使用它们:
=IFNA(FILTER('Another_SheetName'!B:B, 'Another_SheetName'!A:A=92433), HYPERLINK(url, "some_text"))
Another_SheetName
我使用电子表格 api 获得的另一张工作表的名称和some_text
我想要放置的文本在哪里,我有以下两个问题:
some_text
有双引号 ( "
),我会收到公式解析错误。我可以some_text
在单元格 A1 中解决这个问题,然后将公式更改为=HYPERLINK(url, A1)
,但我想知道是否有一种通用的方法来转义文本some_text
以在公式中使用它,这样就不需要使用额外的单元格。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()
但是有一种方法可以在不使用另一个单元格的情况下解决这个问题吗?
我相信你的目标如下。
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] 删除。
我来说两句