下面是我从 mysql 数据库导出数据的代码。它工作正常,但在导出 excel 文件时,文件保存为制表符格式。我只需要将它保存在 Windows 97-2003 工作簿中。我一直在更改标题,但它不起作用.. 当打开这些文件时,它会弹出一些警告,例如“您尝试打开的文件,'filename.xls',其格式与文件扩展名指定的格式不同。 ” 我需要摆脱它。任何人都可以提出建议..提前致谢:)
HTML编码:
<input type="submit" name="frmDownload" id="frmDownload" value="CSV" title="Export" class="frmDownloadButton" />
<input type="submit" name="frmDownload" id="frmDownload" value="Excel" title="Export" class="frmDownloadButton" />
<input type="submit" name="frmDownload" id="frmDownload" value="TEXT" title="Export" class="frmDownloadButton" />
<input type="submit" name="frmDownload" id="frmDownload" value="XML" title="Export" class="frmDownloadButton" />
PHP例程:
if ($_POST["frmDownload"]) {
$output = "";
$line_terminated="\r\n";
$strDatas = array();
$field_terminated = doGetFieldDelimeter($_POST);
$export_schema = "Name".$field_terminated."Code".$field_terminated."Email".$field_terminated."Designation".$field_terminated."Number".$field_terminated."Salary".$field_terminated."Age";
$strDataQuery = doSelectRecords();
$strDatas = $strDataQuery;
$output.= doGetExportSchema($_POST,$export_schema);
$delimeter = doGetDelimeterForTextFile($_POST);
$output.= doExportData($_POST, $strDatas, $field_terminated, $line_terminated, $delimeter);
$output.= doGetXmlTitle($_POST);
doGetHeader($_POST,$output,$objPHPExcel);
echo $output;
exit;
}
功能:
function doSelectRecords()
{
$strSql = "SELECT * FROM tbl_employee";
$strResult = SelectQry($strSql);
return $strResult;
}
function SelectQry($Qry) {
$result = mysql_query($Qry) or die ("QUERY Error:".$Qry."<br>".mysql_error());
$numrows = mysql_num_rows($result);
if ($numrows == 0) {
return;
} else {
$row = array();
$record = array();
while ($row = mysql_fetch_array($result)) {
$record[] = $row;
}
}
return MakeStripSlashes($record);
}
function doGetExportSchema($objArray,$export_schema)
{
if ($objArray["frmDownload"] =="XML") {
$output.= '';
$output.= '<employee>';
} else {
$output.= $export_schema;
}
return $output;
}
function doGetDelimeterForTextFile($objArray)
{
if($objArray["frmDownload"] =="TEXT") {
$delimeter = '\t';
} else {
$delimeter = '';
}
return $delimeter;
}
function doExportData($objArray,$strDatas,$field_terminated,$line_terminated,$delimeter = NULL)
{
for ($k=0; $k<count($strDatas); $k++) {
$strData = $strDatas[$k];
if ($objArray["frmDownload"] == "XML") {
$output.= $line_terminated;
$output.= '<row>';
$output.= $line_terminated;
$output.= '<name>'.$strData['1'].'</name>'.$field_terminated;
$output.= '<code>'.$strData['2'].'</code>'.$field_terminated;
$output.= '<email>'.$strData['3'].'</email>'.$field_terminated;
$output.= '<designation>'.$strData['4'].'</designation>'.$field_terminated;
$output.= '<number>'.$strData['5'].'</number>'.$field_terminated;
$output.= '<salary>'.$strData['6'].'</salary>'.$field_terminated;
$output.= '<age>'.$strData['7'].'</age>'.$field_terminated;
$output.= '</row>'.$field_terminated;
} else {
$output.= $line_terminated;
$output.= $strData['1'].$field_terminated;
$output.= $strData['2'].$field_terminated;
$output.= $strData['3'].$field_terminated;
$output.= $strData['4'].$field_terminated;
$output.= $strData['5'].$field_terminated;
$output.= $strData['6'].$field_terminated;
$output.= $strData['7'].$delimeter;
}
}
return $output;
}
function doGetFieldDelimeter($objArray)
{
switch ($objArray["frmDownload"]) {
case "CSV":
echo $field_terminated= ",";
break;
case "Excel":
echo $field_terminated="\t";
break;
case "TEXT":
echo $field_terminated="|";
break;
case "XML":
echo $field_terminated="\r\n";
break;
}
return $field_terminated;
}
function doGetXmlTitle($objArray)
{
if ($objArray["frmDownload"] == "XML") {
$output.= '</employee>';
}
return $output;
}
function doGetHeader($objArray,$output,$objPHPExcel = NULL)
{
header("Content-Description: File Transfer");
switch ($objArray["frmDownload"]) {
case "CSV":
header("Content-Type: application/csv");
header("Content-Disposition: attachment; filename=employee_details.csv");
break;
case "Excel":
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=Report.xls");
header("Content-Transfer-Encoding: binary ");
break;
case "TEXT":
header("Content-Type: application/txt");
header("Content-Disposition: attachment; filename=employee_details.txt");
break;
case "XML":
header("Content-Type: application/xml");
header("Content-Disposition: attachment; filename=employee_details.xml");
break;
}
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate");
header("Pragma: public");
header("Content-Length: ".strlen($output));
ob_clean();
flush();
}
最佳答案
您可以告诉您的 MySQL 数据库将其转储为 CSV:
$file = 'D:/path/to/website/dump.sql';
// The SELECT...INTO query is unable to overwrite if the
// file already exists, so delete it beforehand:
if (is_file($file))
unlink($file);
$query = "
SELECT id, title, created -- The fields to export
INTO OUTFILE '{$file}' -- The file
FIELDS TERMINATED BY ',' -- Delimiter
OPTIONALLY ENCLOSED BY '\"' -- Quote if necessary
LINES TERMINATED BY '\n' -- End line with LF newline
FROM tbl_employee -- Table name
";
$db = new MySQLi('localhost', 'root', '', 'your_database');
$db->query($query);
// Show any errors...
if ($db->error) {
var_dump($db->error);
}
关于php - php导出数据库数据,导出excel的文件格式应为windows 97-2003 workbook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498403/