Сценарий Bash для редактирования файлов Excel

У меня есть несколько файлов 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 доступных для всех представителей.

2
задан 1 August 2017 в 10:36

2 ответа

Я преобразовал файлы в 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;
1
ответ дан 2 December 2019 в 02:46

Существует 2 сценария, в которых Вы нуждаетесь. Тот для преобразования от XLS до CSV является командой xls2csv и другой сценарий от GitHub: csv2xls (другой csv2xls). Существуют также csv2xlsx (и другой csv2xlsx).

Промежуточный эти 2 преобразования можно отредактировать файлы с помощью любимого инструмента.

Если Вы хотите сделать это сами: файлы xlsx (и то же применяет ODT (open/libeoffice), заархивированы архивы и содержат XML с данными. Можно разархивировать затем, и данные находятся в XML. Управление XML является немного более трудным, что уверенный CSV, но когда управление автоматизировано, это становится довольно эффективным.

2
ответ дан 2 December 2019 в 02:46

Другие вопросы по тегам:

Похожие вопросы: