从PHP导出SQLite数据库到Excel

时间:2013-10-24 14:42:26

标签: php excel sqlite

如何从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的列,而且很多数据都使用了重音符号:è,é,ê,à,ä等。

2 个答案:

答案 0 :(得分:1)

PHPExcel是一个插件,允许您从PHP动态处理Excel对象以进行读写操作。

网址:http://phpexcel.codeplex.com

答案 1 :(得分:0)

我认为你真正想要做的是创建一个CSV文件。 PHP中有一个特定的函数用于编写这种文件,这里是链接: fputscsv function

正如您在函数文档中看到的那样,该函数处理包含不同字段和分隔符的数组,我会粘贴您认为非常清楚的示例代码:

<?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);
?>

示例的输出(在本例中为file.csv):

aaa,bbb,ccc,dddd
123,456,789
"""aaa""","""bbb"""

Excel会自动打开解释特定分隔符的CSV文件(我认为根据区域配置,这可能会有所不同,例如“;”),您应该检查这个以便使用适当的分隔符。

我希望这会有所帮助。