У меня есть несколько файлов excel в этом формате.
--------------------------------- | Name | Time | --------------------------------- | Person A | 03-Jul-17 8:15 AM | | Person A | 03-Jul-17 10:32 AM | | Person A | 03-Jul-17 1:56 PM | | Person A | 03-Jul-17 6:15 PM | | Person A | 04-Jul-17 8:29 AM | | Person A | 04-Jul-17 8:58 AM | | Person A | 04-Jul-17 9:43 AM | | Person A | 04-Jul-17 1:03 PM | | Person A | 04-Jul-17 2:17 PM | | Person A | 04-Jul-17 5:58 PM | . . . | Person A | 31-Jul-17 7:45 AM | | Person A | 31-Jul-17 8:10 AM | | Person A | 31-Jul-17 3:26 PM | | Person A | 31-Jul-17 7:29 PM | ---------------------------------Я хотел бы извлечь эти данные и сохранить их как новый файл excel в этом формате:
--------------------------------------------- | Name | Date | Time In | Time Out | --------------------------------------------- | Person A | 03-Jul-17 | 8:15 AM | 6:15PM | | Person A | 04-Jul-17 | 8:29 AM | 5:58PM | . . . | Person A | 31-Jul-17 | 7:45 AM | 7:29PM | ---------------------------------------------В основном это необходимо для того, чтобы каждый день установить дату для каждой даты с наименьшим временем для этой даты в качестве Time In и последнего времени для этой даты в качестве Time Out.
В этом формате есть несколько файлов excel
Если вы хотите сначала преобразовать их в .csv, а затем преобразовать их обратно в .xlsx, это круто.
PS: Баунти из 200 человек для захватов.
Я преобразовал файлы в csv и использовал PHP-скрипт для анализа содержимого, создающего его, как я действительно хотел. Затем результат был сохранен в новом файле, затем эти файлы были преобразованы обратно в xls, затем объединены в один блокнот.
Часть преобразования и слияния была выполнена вручную. Это не лучшее решение, но сейчас оно работает.
Вот сценарий:
// get list of files from data directory $files = array_diff(scandir('./data'), array('.', '..')); foreach($files as $file): // get all data from the csv file and save in the $data array $csvFile = file('data/'.$file); $data = $list = []; foreach($csvFile as $line) { $data[] = str_getcsv($line); } unset($data[0]); // parse the data array and get the different sections: name. date and time foreach($data as $v) { $date = strtotime($v[1]); $list[date('d-m-Y',$date)][] = array( 'name'=>$v[0], 'date'=>date('d/m/Y',$date), 'in'=>$date ); } // create a new array and save parsed data in it with header columns $new = array(array('Name','Date','Time In','Time Out')); foreach($list as $k => $v) { $out = max(array_column($v, 'in')); $name = $v[0]['name']; $new[] = array( 'name'=>ucwords(strtolower($name)), 'date'=>$v[0]['date'], 'in'=>date('h:i A', $v[0]['in']), 'out'=>date('h:i A', $out) ); } // The name of a new file in the new directory using this file name $filename = str_replace('.csv', '', basename($file)); $fn = strtolower($filename.'-log.csv'); // open the file and output the new array as CSV $out = fopen('new/'.$fn, 'w'); foreach($new as $l) { fputcsv($out, $l, ",",'"'); } fclose($out); endforeach;Я преобразовал файлы в csv и использовал PHP-скрипт для анализа содержимого, создающего его, как я действительно хотел. Затем результат был сохранен в новом файле, затем эти файлы были преобразованы обратно в xls, затем объединены в один блокнот.
Часть преобразования и слияния была выполнена вручную. Это не лучшее решение, но сейчас оно работает.
Вот сценарий:
// get list of files from data directory $files = array_diff(scandir('./data'), array('.', '..')); foreach($files as $file): // get all data from the csv file and save in the $data array $csvFile = file('data/'.$file); $data = $list = []; foreach($csvFile as $line) { $data[] = str_getcsv($line); } unset($data[0]); // parse the data array and get the different sections: name. date and time foreach($data as $v) { $date = strtotime($v[1]); $list[date('d-m-Y',$date)][] = array( 'name'=>$v[0], 'date'=>date('d/m/Y',$date), 'in'=>$date ); } // create a new array and save parsed data in it with header columns $new = array(array('Name','Date','Time In','Time Out')); foreach($list as $k => $v) { $out = max(array_column($v, 'in')); $name = $v[0]['name']; $new[] = array( 'name'=>ucwords(strtolower($name)), 'date'=>$v[0]['date'], 'in'=>date('h:i A', $v[0]['in']), 'out'=>date('h:i A', $out) ); } // The name of a new file in the new directory using this file name $filename = str_replace('.csv', '', basename($file)); $fn = strtolower($filename.'-log.csv'); // open the file and output the new array as CSV $out = fopen('new/'.$fn, 'w'); foreach($new as $l) { fputcsv($out, $l, ",",'"'); } fclose($out); endforeach;Я преобразовал файлы в csv и использовал PHP-скрипт для анализа содержимого, создающего его, как я действительно хотел. Затем результат был сохранен в новом файле, затем эти файлы были преобразованы обратно в xls, затем объединены в один блокнот.
Часть преобразования и слияния была выполнена вручную. Это не лучшее решение, но сейчас оно работает.
Вот сценарий:
// get list of files from data directory $files = array_diff(scandir('./data'), array('.', '..')); foreach($files as $file): // get all data from the csv file and save in the $data array $csvFile = file('data/'.$file); $data = $list = []; foreach($csvFile as $line) { $data[] = str_getcsv($line); } unset($data[0]); // parse the data array and get the different sections: name. date and time foreach($data as $v) { $date = strtotime($v[1]); $list[date('d-m-Y',$date)][] = array( 'name'=>$v[0], 'date'=>date('d/m/Y',$date), 'in'=>$date ); } // create a new array and save parsed data in it with header columns $new = array(array('Name','Date','Time In','Time Out')); foreach($list as $k => $v) { $out = max(array_column($v, 'in')); $name = $v[0]['name']; $new[] = array( 'name'=>ucwords(strtolower($name)), 'date'=>$v[0]['date'], 'in'=>date('h:i A', $v[0]['in']), 'out'=>date('h:i A', $out) ); } // The name of a new file in the new directory using this file name $filename = str_replace('.csv', '', basename($file)); $fn = strtolower($filename.'-log.csv'); // open the file and output the new array as CSV $out = fopen('new/'.$fn, 'w'); foreach($new as $l) { fputcsv($out, $l, ",",'"'); } fclose($out); endforeach;Есть 2 сценария, которые вам нужны. Преобразующим из XLS в CSV является команда xls2csv, а другая - скрипт из github: csv2xls (другой csv2xls). Также есть csv2xlsx (и еще один csv2xlsx).
Между двумя преобразованиями вы можете редактировать файлы с помощью своего любимого инструмента.
Если вы хотите сделать это самостоятельно: файлы xlsx (и то же самое относится ODT (open / libeoffice) - это архивы с zip-файлами и содержат XML с данными. Затем вы можете разархивировать и данные в XML Манипулирование XML немного сложнее, чем CSV, но при автоматическом манипулировании он становится довольно эффективным.
Есть 2 сценария, которые вам нужны. Преобразующим из XLS в CSV является команда xls2csv, а другая - скрипт из github: csv2xls (другой csv2xls). Также есть csv2xlsx (и еще один csv2xlsx).
Между двумя преобразованиями вы можете редактировать файлы с помощью своего любимого инструмента.
Если вы хотите сделать это самостоятельно: файлы xlsx (и то же самое относится ODT (open / libeoffice) - это архивы с zip-файлами и содержат XML с данными. Затем вы можете разархивировать и данные в XML Манипулирование XML немного сложнее, чем CSV, но при автоматическом манипулировании он становится довольно эффективным.
Есть 2 сценария, которые вам нужны. Преобразующим из XLS в CSV является команда xls2csv, а другая - скрипт из github: csv2xls (другой csv2xls). Также есть csv2xlsx (и еще один csv2xlsx).
Между двумя преобразованиями вы можете редактировать файлы с помощью своего любимого инструмента.
Если вы хотите сделать это самостоятельно: файлы xlsx (и то же самое относится ODT (open / libeoffice) - это архивы с zip-файлами и содержат XML с данными. Затем вы можете разархивировать и данные в XML Манипулирование XML немного сложнее, чем CSV, но при автоматическом манипулировании он становится довольно эффективным.