Python 可以确定 Google Sheet 单元格中是否存在图像吗?

问题描述 投票:0回答:1

根据我的理解,有两种方法可以将图像添加到Google表格中的单元格中。

  • 1 : 通过使用
    =IMAGE
    公式
  • 2 : 通过
    Insert > Image > Insert image in cell

我有一个包含图像的“数据库”表。维护起来很痛苦,所以我使用方法 1 将其自动化,但已经有大量使用方法 2。

问题:使用方法 2 时,Python(或者更具体地说,

gspread
)似乎无法检测到图像。这使得分离包含/不包含图像的单元变得不必要的困难。

问题:可以吗?如果是的话,怎么办?

提供的是最小的可重现示例

import gspread

gc = gspread.service_account(JSON_filePath)
spreadsheet = gc.open(sheet_name)

sheet = spreadsheet.worksheet("Images")

data = sheet.get_all_values()

for row in data:
   print(row)

我添加了一个额外的行,其中包含公式:

=ARRAYFORMULA(if(ISBLANK(C2:C),TRUE,FALSE))
这将成功读取单元格是否包含图像。但是,如果可以避免的话,我不希望电子表格中出现此列。

下图显示了使用方法 2 的示例行。第一张图片是上述脚本的输出,第二张图片是相应的 Google Sheet 屏幕截图。

python python-3.x google-sheets gspread
1个回答
0
投票

我认为在现阶段,

get_all_values()
的方法无法检测到细胞中图像的存在。但是,我猜想,当使用Sheets API的“方法:spreadsheets.get”时,也许可以实现这一点。

当这反映在示例脚本中时,它变成如下。

我注意到从您的显示脚本中,您正在使用 gspread。所以,在这个示例中,使用了gspread的客户端。

示例脚本:

import gspread
from googleapiclient.discovery import build

client = gspread.service_account(JSON_filePath) # This client is from your showing script.

# Please set the Spreadsheet ID and the a1Notation of range.
spreadsheetId = "###"
a1Notation = "Sheet1!C1:C"

service = build("sheets", "v4", credentials=client.auth)
obj = service.spreadsheets().get(spreadsheetId=spreadsheetId, fields="sheets(data(rowMetadata,rowData(values(userEnteredValue))))", ranges=[a1Notation]).execute()
data = obj["sheets"][0]["data"][0]
res = []
lenRowData = len(data["rowData"])
lenRowMetadata = len(data["rowMetadata"])
for i in range(lenRowMetadata):
    if lenRowData > i and "values" in data["rowData"][i]:
        v = data["rowData"][i]["values"][0]
        if "userEnteredValue" in v and len(v["userEnteredValue"].keys()) == 0:
            res.append("Image")
            continue
    res.append("No image")
print(res)

例如,当图像放入您显示的示例电子表格中“Sheet1”的“C”列时,请使用

a1Notation = "Sheet1!C1:C"

作为示例结果,在显示的电子表格图像中,获得以下结果。假设第一个“无图像”是此示例结果中的第 1178 行。

[
  ,
  ,
  ,
  "No image",
  "Image",
  "Image",
  "Image",
  "No image",
  "No image",
  "No image",
  "Image",
  "Image",
  "No image",
  "No image",
  "Image",
  "No image",
  ,
  ,
  ,
]

参考:

© www.soinside.com 2019 - 2024. All rights reserved.