Php 将数据导出到excel时类DateTime的对象出错
我有一个包含许多列的表。有些列包含数值,有些列包含文本,有些列包含日期 当我尝试将数据导出到Excel时,数字和值可以导出,但是当我想要导出日期数据时,它显示了这个错误“类DateTime的对象无法转换为字符串” 我的导出函数的工作方式是,用户可以选择要通过PHP从SQL导出到excel的列。我的列存储在数组中。下面是我的代码:Php 将数据导出到excel时类DateTime的对象出错,php,excel,export-to-csv,sqlsrv,sql-server-2012-express,Php,Excel,Export To Csv,Sqlsrv,Sql Server 2012 Express,我有一个包含许多列的表。有些列包含数值,有些列包含文本,有些列包含日期 当我尝试将数据导出到Excel时,数字和值可以导出,但是当我想要导出日期数据时,它显示了这个错误“类DateTime的对象无法转换为字符串” 我的导出函数的工作方式是,用户可以选择要通过PHP从SQL导出到excel的列。我的列存储在数组中。下面是我的代码: //Get list of selected column from selected checkboxes $colarray = $_GET['col
//Get list of selected column from selected checkboxes
$colarray = $_GET['colarray'];
//convert string to array
$string1 = ['[',']'];
$string2 = ["",""];
$newcolarray = str_replace($string1, $string2, $colarray);
$newarray = explode(",",$newcolarray);
$filename = "File name " . date('d-M-y') . ".csv"; // Create file name
$f = fopen('php://memory', 'w');
//Insert column name in first row of excel
fputcsv($f, $newarray);
//dynamic Select query statement
$query = "SELECT ";
$query .= $colarray;
$query .= " FROM OVERALL_SUMMARY_ORIGINAL"; // Get data from Database from OVERALL_SUMMARY_ORIGINAL table
$stmt = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
/**how can i place this code $row['Date']->format('d M Y') here***/
fputcsv($f, $row);
}
//move back to beginning of file
fseek($f, 0);
//set headers to download file rather than displayed
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
//output all remaining data on a file pointer
fpassthru($f);
由于我的列存储在数组中以导出为csv,有谁能帮助我将日期数据转换为字符串吗?使用PHP Driver for SQL Server,您可以使用连接字符串或语句级别的
'ReturnDateSasString'
选项将日期和时间对象作为字符串或日期时间对象
<?php
...
$query = "SELECT ";
$query .= $colarray;
$query .= " FROM OVERALL_SUMMARY_ORIGINAL"; // Get data from Database from OVERALL_SUMMARY_ORIGINAL table
$options = array('ReturnDatesAsStrings' => true);
$stmt = sqlsrv_query($conn, $query, array(), $options);
if ($stmt === false) {
echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
exit;
}
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
fputcsv($f, $row);
}
...
?>
如果我正确理解您的情况,那么SQL语句中的列是动态的。在这种情况下,您可以尝试在语句级别使用此功能
<?php
...
$query = "SELECT ";
$query .= $colarray;
$query .= " FROM OVERALL_SUMMARY_ORIGINAL"; // Get data from Database from OVERALL_SUMMARY_ORIGINAL table
$options = array('ReturnDatesAsStrings' => true);
$stmt = sqlsrv_query($conn, $query, array(), $options);
if ($stmt === false) {
echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
exit;
}
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
fputcsv($f, $row);
}
...
?>
在你有评论的地方,只需把
$row['Date']=$row['Date']->格式('dmy')
@Nick这肯定行不通,我必须声明一个变量$date=$row['date']->format('dmy'),但是由于我正在将数组插入csv中,数组依赖于所选列,所以我应该将$date放置在何处。我要说的是替换$row['date']中的DateTime
对象
带有该日期的字符串表示形式。我不明白为什么这样不行?尼克,我非常抱歉。我误解了你的第一句话。现在可以了。很抱歉,没问题。我很高兴你让它工作了。