【问题标题】:PHP setting path for export excel导出excel的PHP设置路径
【发布时间】:2012-12-31 15:02:32
【问题描述】:

我想将 excel 导出到特定文件夹,用户可以将其保存在他们想要的任何地方。目前我已经成功导出到 excel 但我在本地对其进行了测试并将其下载到我的本地服务器文件夹中。我希望有一个人可以帮助我。谢谢。

$id=$_GET['id'];
$excel=new ExcelWriter("./excel/company".$id.".xls");
if($excel==false)   
echo $excel->error;
$myArr=array("NO", "COMPANY", "ADDRESS1", "ADDRESS2", "ADDRESS3", "POSTCODE", "CITY", "STATE", "PHONE NO", "FAX NO", "EMAIL", "WEBSITE");
$excel->writeLine($myArr);
$qry=mysql_query(" SELECT organizations.*, states.state, cities.city FROM organizations, states, cities WHERE idOrg='$id' AND organizations.state_id=states.idState AND organizations.city_id=cities.idCity");
if($qry!=false)
{
    $i=1;
    while($res=mysql_fetch_array($qry))
    {
        $myArr=array($i,$res['companyName'], $res['add1'], $res['add2'], $res['add3'], $res['postcode'], $res['city'],$res['state'], $res['phoneNo'], $res['faxNo'], $res['email'], $res['website']);
        $excel->writeLine($myArr);
        $i++;
    }
}

【问题讨论】:

    标签: php export-to-excel filepath


    【解决方案1】:

    您的问题标题表明您假设使用 PHP,您可以在客户端的 PC 上保存 Excel 文件。不完全是。您可以将其保存到本地网络服务器(正如您已经发现的那样)。但是要将其传输到客户端 PC,您应该将其作为下载提供。

    文件写入完成后(正如您已经在做的那样),向用户提供指向您服务器上文件的链接。然后,他们将能够选择应该在他们的 PC 上下载它的位置。

    另一种可能性是将 excel 文件数据作为 HTTP 响应写出,并将 Content-Type 标头设置为类似于 application/vnd.ms-excel (或任何适合您的文件类型)和 Content-Dispositionattachment (example)。

    我不熟悉 ExcelWriter,所以我不知道它是否有某种dump 函数。也许在你写出文件后,你只需执行以下操作:

    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment; filename=company'. $id .'.xls');
    
    echo file_get_contents('./excel/company'. $id .'.xls');
    

    【讨论】:

    • 谢谢你,@Travesty3!抱歉我回复晚了。我昨晚太累了,睡着了。 :) 我已经按照您的建议进行了尝试,但是文件自动下载到 PC,这意味着它没有提供应该下载的位置。但由于它没有下载到本地服务器文件夹,而是下载到我电脑中的默认下载文件夹,所以你帮了我很多。再次感谢,新年快乐! ;)
    • @mella:自动下载到“下载”文件夹或提示用户选择下载位置的选项完全不在您的掌控之中。这是由用户的浏览器处理的,因此这取决于他们使用的浏览器以及他们选择的设置。你对此无能为力。如果这对于您的场景来说是不可接受的,那么我认为您唯一可以做的就是给用户一个链接并指示他们使用右键单击->另存为...
    • 感谢您的建议,@Travesty3。我在一个免费的网络主机上试过它,它工作并导出了我需要的数据。但是当我在我实习的公司虚拟主机上试用它时,它下载了文件,但里面没有导出数据。有任何想法吗?因为数据库密码保护?
    • @mella:尝试将else 添加到您的if ($qry!=false) 语句中。在其中,执行die(mysql_error()); 以查看您的查询是否产生错误(例如“无法连接”或其他内容)。这是用于调试的,应该在推送到生产环境之前将其删除,以避免将数据库信息输出给用户。附带说明一下,您应该避免使用mysql_* 函数。 They are officially deprecated(注意红框)。相反,您应该按照链接中的建议使用 PDO 或 mysqli。
    【解决方案2】:

    解决方案在他们的文档中

    http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.intro.php

    摘自上述网站

    // sending HTTP headers
    $workbook->send('test.xls'); 
    

    这意味着我们正在发送 我们的电子表格到浏览器。但是如果我们只想保存 我们机器中的电子表格?好吧,你只需要省略那行 为工作簿构造函数提供一个有效的文件路径。

    例如,如果我们想保存我们创建的同一个电子表格 我们的第一个例子是一个名为“test.xls”的文件,我们会这样做:

    然后您可以将用户指向该文件的链接,以便他可以将其保存在他喜欢的位置

    【讨论】:

    • 你救了我,伙计。谢谢。
    【解决方案3】:
    "./excel/company".$id.".xls"
    

    你确定这是你要保存的相对路径吗?您可以使用 $_SERVER['DOCUMENT_ROOT'] 来获取文档根目录并使用它 + 像这样的路径。

    $_SERVER['DOCUMENT_ROOT'] . "/excel/company".$id.".xls
    

    也不要忘记关闭文件。

    $excel->close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-17
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多