2

我想将智能表保存到我的服务器(作为 .xls)。但我总是得到一个充满 json 代码的 .xls。如果我使用 json_decode(..) 并且 .xls 完全为空,则会收到“file_put 错误”。如果我通过桌面上的 curl 执行此操作,我会得到正确的 .xls,其中包含我需要的所有内容。

$baseURL = "https://api.smartsheet.com/1.1";
$headers = array("Authorization: Bearer ".$inputToken);
.
.
array_push($headers,'"Accept: application/vnd.ms-excel" -o  tmpfile.xls --insecure');
$curlSession = curl_init($sheetDetail_url);
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE);
$smartsheetData = curl_exec($curlSession);

if (curl_errno($curlSession))
{
    echo "Oh No! Error: " . curl_error($curlSession);
}else{
    // Assign response to PHP object
    $sheetsObj = json_decode($smartsheetData);
    // close curlSession
    curl_close($curlSession);
}
$file1="tmpfile.xls";
if(!(file_put_contents($file1, $sheetsObj))){
    echo "file_put error";
} 

我希望你能帮助我。谢谢

4

1 回答 1

3

在您的示例中需要调整的项目是标题以及如何处理响应。

首先,在标题中使用 curl 命令行选项将不起作用。相反,您只需要指定返回的 XLS 文件应带有如下标头:

$headers = array("Authorization: Bearer ".$inputToken,
    "Accept: application/vnd.ms-excel");

其次,由于要返回一个 XLS 文件,我们不希望将该响应解析为 JSON。相反,立即将响应写入文件。

考虑到这一点,以下示例应该适合您并将指定的工作表检索为 XLS 文件。确保将YOUR_TOKEN和替换YOUR_SHEET_ID为适当的值。

<?php
$inputToken = 'YOUR_TOKEN';
$baseURL = "https://api.smartsheet.com/1.1";

$sheetDetail_url = $baseURL.'/sheet/YOUR_SHEET_ID';

$headers = array("Authorization: Bearer ".$inputToken,
    "Accept: application/vnd.ms-excel");

$curlSession = curl_init($sheetDetail_url);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curlSession, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, TRUE);

$smartsheetData = curl_exec($curlSession);

// Check for error or save the file
if (curl_errno($curlSession))
{
    echo "Oh No! Error: " . curl_error($curlSession);
}else{
    curl_close($curlSession);

    $file1="tmpfile.xls";
    if(!(file_put_contents($file1, $smartsheetData))){
        echo "file_put error";
    }
}

?>
于 2014-07-22T16:25:47.590 回答