如何从PHP脚本将SQLite文件导出为Excel?
我目前使用以下代码将表和数据导出为纯 HTML 表:
$dbh = new PDO('sqlite:' . $path . "/" . $lang . "/" . $dbname . ".sqlite");
$sql = "SELECT tbl_name FROM sqlite_master WHERE type='table';";
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {
$sql = "SELECT * FROM " . $row['tbl_name'];
$sub_stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$sub_stmt->execute();
echo "<br><br><table border=1><thead>". $row['tbl_name'] ."</thead><tbody>";
while ($sub_row = $sub_stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {
foreach ($sub_row as $key => $value) {
$titles .= "<td>" . $key . "</td>";
$sub_row_table[] = "<td>" . $sub_row[$key] . "</td>";
}
if(!$titlesPrinted) {
echo "<tr>" . $titles . "</tr>";
$titlesPrinted = true;
}
echo "<tr>";
foreach($sub_row_table as $value) {
echo $value;
}
echo "</tr>";
}
echo "</tbody></table>";
}
$dbh = null;
但是,如果 sqlite 表包含大量数据,则效果不佳,页面需要一段时间才能加载所有内容。理想情况下,我更愿意创建链接来下载Excel工作表(或者可以将所有工作表导出到一个Excel工作簿文件中,所有工作表作为每个表?),或者至少链接到弹出/显示表格,而不是消耗大量资源回显到用户的屏幕。
编辑:
忘了提到我的sqlite数据包含一些使用HTML的列,并且许多数据使用重音,例如:è,é,ê,à,ä等。
PHPExcel是一个插件,允许您动态处理来自PHP的Excel对象以进行读写操作。
网址: http://phpexcel.codeplex.com
我认为您真正想做的是创建一个CSV文件。PHP中有一个特定的函数用于编写此类文件,这里是链接:FPUTSCSV 函数
正如您在函数文档中看到的那样,该函数处理包含不同字段和分隔符的数组,我粘贴了我认为非常清楚的示例代码:
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
示例的输出(在本例中为存档.csv):
aaa,bbb,ccc,dddd
123,456,789
"""aaa""","""bbb"""
Excel会自动打开解释特定分隔符的CSV文件(我认为根据区域配置,这可能会有所不同,例如";"),您应该检查这一点以使用适当的分隔符。
我希望这有所帮助。