【问题标题】:Get hyperlink from Google Sheet cell using PHP API使用 PHP API 从 Google Sheet 单元格获取超链接
【发布时间】:2020-11-09 22:54:07
【问题描述】:

我找到了其他相关的文章,但没有一篇给出我需要的基于 PHP API 的答案。

我有一个包含超链接的单元格的电子表格:

这是我的代码:

$get_range = "Sheet1!A:Z";
$response = $service->spreadsheets_values->get($spreadsheetId, $get_range, ['valueRenderOption' => 'FORMULA']);
$values = $response->getValues();

这是$values 返回的内容:

Array
(
    [0] => Array
        (
            [0] => Column Title
        )
    [1] => Array
        (
            [0] => Some Item
        )
    [2] => Array
        (
            [0] => Some Item with a Link
        )
    [3] => Array
        (
            [0] => Some Item
        )
    [4] => Array
        (
            [0] => Another Item
        )
)

您会注意到返回的数据中没有与链接相关的内容。有没有人成功使用 PHP API 获取链接?

【问题讨论】:

    标签: php google-sheets google-sheets-api


    【解决方案1】:

    我相信你的目标和你目前的情况如下。

    • 您希望使用 googleapis for php 从 Google 电子表格中的工作表中检索超链接。
    • 将超链接放入单元格。
    • 您已经能够使用 Sheets API 从 Google 电子表格中检索值。

    修改点:

    • 在这种情况下,需要使用Sheets API 中的“spreadsheets.get”方法。此外,需要使用fields

    当以上几点反映到示例脚本中时,它变成如下。

    示例脚本:

    $spreadsheetId = "###"; // please set Spreadsheet ID.
    $sheetName = "Sheet1"; // Please set sheet name.
    
    $res = $service->spreadsheets->get($spreadsheetId, ["ranges" => [$sheetName], "fields" => "sheets(data(rowData(values(hyperlink,formattedValue))))"]);
    $rowData = $res->getSheets()[0]->getData()[0]->getRowData();
    $result = [];
    foreach ($rowData as $i => $row) {
        foreach ($row as $j => $col) {
            $link = $col -> getHyperlink();
            if (isset($link)) {
                array_push($result, ["value" => $col -> getFormattedValue(), "link" => $link, "row" => $i + 1, "col" => $j + 1]);
            }
        }
    }
    print(json_encode($result));
    
    • 此示例脚本假定$service 可用于从电子表格中检索值。请注意这一点。
    • 此示例脚本从工作表中检索超链接。如果要检索所有工作表,请修改上述脚本。
    • 我使用sheets(data(rowData(values(hyperlink,formattedValue)))) 作为fields 的值。您也可以将sheets 用作fields

    结果:

    上面的脚本运行时,得到如下结果。

    [
      {
        "value": "a3",
        "link": "https://sample1/",
        "row": 3,
        "col": 1
      },
      {
        "value": "a5",
        "link": "https://sample2/",
        "row": 5,
        "col": 1
      }
      ,
      ,
      ,
    ]
    
    • valuelink 分别是单元格的值和单元格的超链接。
    • rowcol 分别是单元格的行号和列号。

    注意:

    • 在此示例脚本中,它假定单元格具有超链接。如果超链接是单元格中的文本中的单词,则在当前阶段,无法检索超链接。如果要检索它,则需要使用 Google Apps 脚本作为当前的解决方法。 Ref

    参考:

    补充:

    从您共享的电子表格中,我了解到您想从一个单元格中检索单元格值和超链接并将它们放入每个单元格。为此,我认为通过修改上述示例脚本,可以实现您的目标。修改后的脚本如下。

    修改脚本:

    $spreadsheetId = "###"; // please set Spreadsheet ID.
    $sheetName = "Sheet1"; // Please set sheet name.
    
    $res = $service->spreadsheets->get($spreadsheetId, ["ranges" => [$sheetName], "fields" => "sheets(data(rowData(values(hyperlink,formattedValue))))"]);
    $rowData = $res->getSheets()[0]->getData()[0]->getRowData();
    $result = [];
    foreach ($rowData as $i => $row) {
        foreach ($row as $j => $col) {
            $link = $col -> getHyperlink();
            if (isset($link)) {
                array_push($values, [$col -> getFormattedValue(), $link]);
            }
        }
    }
    $range = "Sheet2";
    $body = new Google_Service_Sheets_ValueRange(array('values' => $values));
    $service->spreadsheets_values->update($spreadsheetId, $range, $body, array('valueInputOption' => 'USER_ENTERED'));
    
    • 在此脚本中,通过拆分单元格值和超链接,将从“Sheet1”检索到的单元格值和超链接放入“Sheet2”。所以在你使用这个脚本之前,请添加“Sheet2”的工作表。
    • 在这种情况下,将值放入电子表格。所以请注意您使用的范围。

    【讨论】:

    • 您在代码中提到了这一点:sheets(data(rowData(values(hyperlink,formattedValue)))) 是文字还是应该定义的变量?
    • @Loko Web Design 感谢您的回复。我带来的不便表示歉意。关于sheets(data(rowData(values(hyperlink,formattedValue)))),这是fields的值,也就是字符串值。使用fields,可以从 Google API 检索特定值。例如,您可以在here 看到sheets 的字段。但如果我的回答对您的问题没有用处,我深表歉意。
    • @Loko Web Design 有什么可以解决您的问题的吗?如果我的回答对您的情况没有用。我必须道歉并修改它。如果您能合作解决您的问题,我很高兴。我想考虑一下解决方案。
    • 抱歉没有回复。我无法让您的代码正常工作。我最终只是为链接添加一列并从那里拉取而不是尝试获取嵌入式链接。
    • @Loko Web Design 感谢您的回复。我不得不为我糟糕的英语水平道歉。不幸的是,我无法理解I ended up just adding a column for links and pulling from there instead of trying to get the embedded links.。可以问一下它的详细情况吗?通过这个,我想尝试理解它。我再次为我糟糕的英语水平深表歉意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    相关资源
    最近更新 更多