Хобрук: Ваш путь к мастерству в программировании

Экспорт PHP в Excel из проблемы mysql DateTime

Прежде всего, у меня есть следующая таблица 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

Структуры для даты (date) и для времени (datetime).

  • Следующим шагом будет экспорт приведенной выше таблицы в формат 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) и (Распродажа-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 читать всю временную строку?

Спасибо

21.04.2014

  • Каков ваш ПЕРВИЧНЫЙ КЛЮЧ? 22.04.2014
  • Я не вижу никакого преобразования дат или времени в временные метки Excel или форматирования ячеек в форматы даты или времени.... где вы это делаете в своем коде? 22.04.2014
  • @MarkBaker О, понятно, не могли бы вы просто помочь мне узнать больше о том, как использовать преобразование? Спасибо 22.04.2014
  • @Strawberry У меня есть идентификатор автоматического увеличения перед item_no, но он не меняет вывод. 22.04.2014

Ответы:


1

Предполагая, что $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');

or

$objPHPExcel->getActiveSheet()
    ->getStyle('A1')
    ->getNumberFormat()
    ->setFormatCode('yyyy-m-d h:m:ss');
21.04.2014
Новые материалы

Пять вещей, о которых вы должны ДЕЙСТВИТЕЛЬНО побеспокоиться в связи с ИИ
Несмотря на то, что циркулирует много неточной информации об ИИ, важно исправить частые заблуждения. Многие могут быть обеспокоены тем, что их в конечном итоге заменят роботом, или..

Тестирование ответов на вопросы на основе BERT по статьям о коронавирусе
Введение В настоящее время большая часть мира затронута пандемией COVID-19 . Для многих из нас это означало домашний карантин, социальное дистанцирование, перебои в рабочей среде. Я..

Библиотеки PyTorch и Python для машинного обучения: приложения в здравоохранении с обнимающим лицом…
В сфере машинного обучения Python выделяется благодаря своей универсальности и набору предлагаемых библиотек. Развитие машинного обучения в здравоохранении можно частично объяснить простотой и..

«Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!
«Что за…» очень хорошо представляет мое выражение лица после того, как я увидел это!

5 вещей, которые я сделал, чтобы стать профессиональным разработчиком JavaScript
Чтобы стать профессиональным JS-разработчиком: 1. Практикуйтесь в рутине, 2. Работайте над проектами, 3. Придерживайтесь одного языка, 4. Наблюдайте за чужим кодом, 5. Будьте последовательны..

От теории к практике: пошаговое руководство по реализации наивного Байеса
Вы когда-нибудь застревали в проекте классификации, не зная, как точно предсказать результаты для ваших данных? Вы искали более простой и интуитивно понятный алгоритм, который поможет вам достичь..

#093 | Моделирование вспышки эпидемии с помощью JavaScript — Часть 3
TLDR: Я сделал симуляцию вспышки эпидемии, в которую можно поиграть здесь . Мой холст, моя сцена Мой HTML — это всего лишь один div с классом stage, и вот как я настроил на нем свой объект..