将智能表保存为服务器上的.xls(curl / php)

时间:2014-07-22 10:02:43

标签: php excel curl smartsheet-api smartsheet-api-1.1

我想将智能表保存到我的服务器(如.xls)。 但我总是得到一个充满json代码的.xls。 如果我使用json_decode(..)并且.xls完全为空,我会收到“file_put error”。 如果我通过桌面上的卷曲来实现,我会得到正确的.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";
} 

我希望你能帮助我。谢谢

1 个答案:

答案 0 :(得分:3)

示例中需要调整的项目是标题以及响应的处理方式。

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

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

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

考虑到这一点,以下示例应该适合您,并将指定的工作表检索为XLS文件。请务必使用适当的值替换YOUR_TOKENYOUR_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";
    }
}

?>