使用PHPExcel函数将日期和日期时间作为文本写入excel

使用PHPExcel函数将日期和日期时间作为文本写入excel,php,wordpress,excel,date,phpexcel,Php,Wordpress,Excel,Date,Phpexcel,我的PHPExcel函数有问题,这是我的代码: <?php # Load slim WP define( 'WP_USE_THEMES', false ); require( './wp-load.php' ); # http://phpexcel.codeplex.com/ require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; global $wpdb; $query = "Select tsales_funnel.ID

我的PHPExcel函数有问题,这是我的代码:

<?php
# Load slim WP
define( 'WP_USE_THEMES', false );
require( './wp-load.php' );
# http://phpexcel.codeplex.com/
require_once dirname(__FILE__) . '/Classes/PHPExcel.php';
global $wpdb;
$query = "Select
  tsales_funnel.ID As ID,
  wp_users.display_name As Darijuma_vaditajs,
  tcportal_starpnieks.Cp_Name As Starpnieks,
  tcportal_stucture.Cp_Name As OWCA,
  n_products.Product_Nos As Produkts,
  tsales_funnel_mrecord.Product_type as Produkta_kods,
    tsales_funnel.Sanems_date as Saņēmšanas_datums,
  tsales_funnel_mrecord.Deadline As Deadline,
  n_sf_statusi.nosaukums_lv As Statuss,
  tsales_funnel_clients.Reg_nr As Klienta_Regnr,
  tfirmas_reg.name_in_quotes As Klients,
  tsales_funnel_mrecord.Faze_date as Faze_date,
  n_sf_fazes.nosaukums_lv As Faze,
  tsales_funnel_mrecord.Summa As Apdrošīnājuma_summa,
  tsales_funnel_mrecord.Vien_skaits As TRL_skaits,
  tsales_funnel_mrecord.Compensa_cena,
  tsales_funnel_mrecord.Tirgus_cena,
  wp_users02.display_name As Riska_parakstitajs,
  comm.Comment as Aizveršanas_komentārs
From
  tsales_funnel Left Join
  tsales_funnel_mrecord On tsales_funnel.ID = tsales_funnel_mrecord.Funnel_ID
  Left Join
  tcportal_starpnieks On tcportal_starpnieks.Cp_code = tsales_funnel.Starpnieks
  Left Join
  tcportal_stucture On tcportal_stucture.Cp_code = tsales_funnel.OWCA Left Join
  tsales_funnel_clients On tsales_funnel_clients.Funnel_ID = tsales_funnel.ID
  Left Join
  tfirmas_reg On tfirmas_reg.regcode = tsales_funnel_clients.Reg_nr Left Join
  wp_users On tsales_funnel.Darijuma_vaditajs = wp_users.user_login Left Join
  n_sf_statusi On n_sf_statusi.id = tsales_funnel.Statuss
  Left Join n_sf_fazes on tsales_funnel_mrecord.Product_faze = n_sf_fazes.id
   Left Join
  n_products On tsales_funnel_mrecord.Product_type = n_products.Product_Code
  Left Join
  (SELECT * FROM tsales_funnel_comments WHERE Comm_type = 4) as comm On tsales_funnel.ID = comm.Funnel_ID
  Left Join
  wp_users As wp_users02
    On wp_users02.user_login = tsales_funnel_mrecord.Risk_acceptance
WHERE 
tsales_funnel_clients.Tips_Galvenais = 1
";
$error = "Error: the query failed...
    <pre style='width:700px;word-wrap:break-word;white-space:normal;'>$query</pre>";
$result = $wpdb->get_results( $query, ARRAY_A ) or wp_die( $error );
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->getProperties()
        ->setCreator("user")
            ->setLastModifiedBy("user")
        ->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");
// Set the active Excel worksheet to sheet 0
$objPHPExcel->setActiveSheetIndex(0); 
// Initialise the Excel row number
$rowCount = 0; 
// Sheet cells
$cell_definition = array(
    'A' => 'ID',
    'B' => 'Darijuma_vaditajs',
    'C' => 'Starpnieks',
    'D' => 'OWCA',
    'E' => 'Produkts',
    'F' => 'Produkta_kods',
    'G' => 'Saņēmšanas_datums',
    'H' => 'Deadline',
    'I' => 'Statuss',
    'J' => 'Klienta_Regnr',
    'K' => 'Klients',
    'L' => 'Faze_date',
    'M' => 'Faze',
    'N' => 'Apdrošīnājuma_summa',
    'O' => 'TRL_skaits',
    'P' => 'Compensa_cena',
    'Q' => 'Tirgus_cena',
    'R' => 'Riska_parakstitajs',
    'S' => 'Aizveršanas_komentārs'
);
// Build headers
foreach( $cell_definition as $column => $value )
    $objPHPExcel->getActiveSheet()->setCellValue( "{$column}1", $value ); 
// Build cells
while( $rowCount < count($result) ){ 
    $cell = $rowCount + 2;
    foreach( $cell_definition as $column => $value ){
        switch($column) {
            case 'G';
            case 'H';
            $val = '=DATEVALUE("'.date('Y.m.d',strtotime($result[$rowCount][$value])).'")';
        $objPHPExcel->getActiveSheet()->setCellValue($column.$cell, $val);
        break;
        case 'L';
        $val = date('Y.m.d H:i:s',strtotime($result[$rowCount][$value]));
        $objPHPExcel->getActiveSheet()->getStyle($column.$cell)
            ->getNumberFormat()
            ->setFormatCode("yyyy.mm.dd h:mm");
        $objPHPExcel->getActiveSheet()->setCellValue($column.$cell, $val);
        break;
        default;
        $val = $result[$rowCount][$value];
        $objPHPExcel->getActiveSheet()->setCellValue($column.$cell, $val);
        }
        }
    $rowCount++; 
} 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="iPortal_Atskaite_'.date('Y-m-d_H.i.s', strtotime('+3 hour')).'.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
setCategory(“测试结果文件”);
//将活动Excel工作表设置为工作表0
$objPHPExcel->setActiveSheetIndex(0);
//初始化Excel行号
$rowCount=0;
//薄板单元
$cell\u definition=数组(
'A'=>'ID',
“B”=>“Darijuma_vaditajs”,
'C'=>'Starpnieks',
'D'=>'OWCA',
'E'=>'Produkts',
'F'=>'Produkta_kods',
“G”=>“萨米纳什基准面”,
'H'=>'截止日期',
“I”=>“状态”,
'J'=>'Klienta_Regnr',
'K'=>'Klients',
'L'=>'Faze_date',
'M'=>'Faze',
‘N’=>‘ApdrošNājuma_summa’,
“O”=>“TRL_skaits”,
‘P’=>‘补偿’,
“Q”=>“蒂尔古斯•塞纳”,
'R'=>'Riska_parakstitajs',
'S'=>'Aizveršanas_komentārs'
);
//生成标题
foreach($cell\u定义为$column=>$value)
$objPHPExcel->getActiveSheet()->setCellValue(“{$column}1”,$value);
//建造细胞
而($rowCount$value){
开关($列){
案例“G”;
案例“H”;
$val='=DATEVALUE(“.date('Y.m.d',strottime($result[$rowCount][$value]))”)”;
$objPHPExcel->getActiveSheet()->setCellValue($column.$cell,$val);
打破
案例“L”;
$val=date('Y.m.d H:i:s',strottime($result[$rowCount][$value]);
$objPHPExcel->getActiveSheet()->getStyle($column.$cell)
->getNumberFormat()
->setFormatCode(“yyyy.mm.ddh:mm”);
$objPHPExcel->getActiveSheet()->setCellValue($column.$cell,$val);
打破
违约
$val=$result[$rowCount][$value];
$objPHPExcel->getActiveSheet()->setCellValue($column.$cell,$val);
}
}
$rowCount++;
} 
标题('Content-Type:application/vnd.openxmlformats officedocument.spreadsheetml.sheet');
页眉('Content-Disposition:attachment;filename=“iPortal_Atskaite_.”日期('Y-m-d_H.i.s',strotime('+3小时'))。.xlsx“);
标头('Cache-Control:max age=0');
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
$objWriter->save('php://output');
出口
我对列使用开关,在这里我需要一种不同的单元格格式

G列和H列我需要格式2015.10.05(yyyy.mm.dd)和L列2015.10.05 12:03(yyyy.mm.dd H:I)

函数getStyle()不起作用,返回相同的值。如果输出为=datevalue,这是excel函数,则一切正常,但它不适用于时间

此外,如果我在excel中按“编辑单元格”并按enter键,则该日期将转换为excel的正常日期,并且一切正常


因此,问题在于输出格式。我如何定义它?对于其他列,例如数字,一切正常。

您需要将日期和日期/时间转换为MS Excel序列化的日期时间戳。。。。MS Excel不会自动将字符串转换为日期,也不会简单地设置样式以任何方式更改存储在单元格中的实际值(本例中为字符串)

PHPExcel在PHPExcel_Shared_Date类中提供了几种不同的方法,可以让您进行这些转换

$dto = new DateTime($result[$rowCount][$value]);
$dateVal = PHPExcel_Shared_Date::PHPToExcel($dto);
$objPHPExcel->getActiveSheet()->getStyle($column.$cell)
    ->getNumberFormat()
    ->setFormatCode("yyyy.mm.dd h:mm");
$objPHPExcel->getActiveSheet()->setCellValue($column.$cell, $dateVal);

它在该列的所有单元格中返回:“FALSE”:(返回false?
$result[$rowCount][$value]的值是多少?)
PHPToExcel()。如果它没有抱怨您的
$val=date('Y.m.d H:i:s',strottime($result[$rowCount][$value])
返回了一个实际的日期字符串,那么
PHPToExcel()
应该能够处理它而不会出现问题当使用
echo$result[$rowCount][$value]
返回该格式时:2015-10-01 12:01:52。尝试使用:
$val=date('Y.m.d H:i:s',strottime($result[$rowCount][$value])$dateVal=PHPExcel\u Shared\u Date::PHPToExcel($val)