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

我想保存一个智能表到我的服务器(如.xls)。 但是我总是得到一个填充了json代码的.xls文件。 我得到“file_put错误”,如果我使用json_decode(..)和.xls完全是空的。 如果我通过在桌面上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"; } 

我希望你能帮助我。 谢谢

在你的例子中需要调整的项目是标题和响应如何处理。

首先,在标题中使用curl命令行选项将不起作用。 相反,你只需要指定一个XLS文件应该像下面这样标题返回:

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

其次,由于XLS文件将被返回,我们不想把这个响应parsing为JSON。 相反,请立即将响应写入文件。

考虑到这一点,下面的例子应该为你工作,并检索指定的工作表作为XLS文件。 确保使用适当的值replaceYOUR_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"; } } ?>