首先,我有以下mysql表(sold_items_records),如下所示
item_no qty price date time
x1 2 10 2014-4-21 2014-4-21 00:8:20
x2 4 12 2014-4-21 2014-4-21 00:8:20
x3 1 15 2014-4-22 2014-4-22 00:10:55
x1 2 11 2014-4-22 2014-4-22 01:11:40
x1 2 11 2014-4-22 2014-4-22 01:11:40
日期的结构是(日期)和时间(日期时间)。
下一步是根据时间将上表导出为Excel格式.xls!所以这是下面的PHP代码:
error_reporting(E_ALL);
require_once ('Classes/PHPExcel.php');
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
$query = "SELECT * from sold_items_records ORDER BY time";
$result = mysql_query($query);
while ( $row = mysql_fetch_assoc($result) ) {
if ( !isset($curtime) || $curtime != $row['time'] ) {
$curtime = $row['time'];
$query2 = "SELECT item_no,qty,price,date,time from sold_items_records where time = '".$curtime."'";
$result2 = mysql_query($query2);
//Excuting Values from Mysql to Excel
$row2 = 2; // 1-based index
while($row_data2 = mysql_fetch_assoc($result2)) {
echo $row_data2['time'];
$col2 = 0;
//Row Headers
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Item No')
->setCellValue('B1', 'QTY')
->setCellValue('C1', 'Price')
->setCellValue('D1', 'Date')
->setCellValue('E1', 'Time');
//Row Values
foreach($row_data2 as $key2=>$value2) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col2, $row2, $value2);
$col2++;
}
$row2++;
}
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
//Check if File Name Exists
$name = 'C:/Sales-'.date("d-m-Y",strtotime($row['time'])).'.xls';
$index = 1;
while(file_exists($name)) {
$name = $name.'--'.$index.".xls";
$index++;
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save($name);
}
}
所需的输出结果是基于分组时间有多个excel文件...我的意思是将文件命名为A)(Sale-2014-4-21)B)(Sale-2014-4- 22)和(Sale-2014-4-22 --- 1)是的两个日期相同,因为相同日期的时间不同。
当为每个文件打开excel文件时,文件A)显示正确的项目x1和x2 ...而对于文件B)它将显示X3 X1和X1 ...这不是我需要的,而是它应该只显示X3 ...文件C也一样,结果将是X1 X1和X3 ...它应该只显示X1和X1 ......
这是一个具有挑战性的问题,说实话,我花了5天时间试图找出原因......幸运的是我尝试使用替代方式作为CSV格式,结果是100%真实的。但是当我回到Excel格式时,时间似乎搞砸了,或者可能忽略了时间。
所以我猜它在Excel中的时间格式,任何想法如何强制excel读取整个时间行?
由于
答案 0 :(得分:0)
假设$row_data2['date']
和$row_data2['time']
是格式化的日期字符串(采用PHP DateTime
对象识别的格式,转换为Excel时间戳:
$excelDateStamp = PHPExcel_Shared_Date::PHPToExcel(
new DateTime($row_data2['date'])
);
和
$excelTimeStamp = PHPExcel_Shared_Date::PHPToExcel(
new DateTime($row_data2['time'])
);
设置PHPExcel单元格的日期格式:
$objPHPExcel->getActiveSheet()
->getStyle('A1')
->getNumberFormat()
->setFormatCode('yyyy-m-d');
或
$objPHPExcel->getActiveSheet()
->getStyle('A1')
->getNumberFormat()
->setFormatCode('yyyy-m-d h:m:ss');