0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 4
|
|
1 | |
Простой парсер xls или csv13.05.2015, 14:23. Показов 7672. Ответов 20
Метки нет (Все метки)
Прошу помощи в решении задачи.
Надо xls файл (либо csv, который получается из этого xls) прочитать построчно с занесением в отдельные переменные значений каждой ячейки. В каждой строке - 14 ячеек (может когда-то измениться). Дальше, в цикле внешней утилите (скажем, myutil.exe) надо передать некие из этих параметров и дождаться окончания ее работы, после чего прочитать следующую строку из xls/csv. Строк может быть несколько тысяч... Писать простые .bat умел лет 25 назад, но время ушло на несвязанные с програмированием вещи... Спасибо.
0
|
13.05.2015, 14:23 | |
Ответы с готовыми решениями:
20
Конвертация json в csv или xls Экспорт из phpmyadmin в csv или xls Как объединить 2 файла CSV или XLS в 1 Выгрузка данных со страницы в xls или csv |
13.05.2015, 16:18 | 2 |
Schtirliz, давайте более конкретней, какие именно ячейки. Желательно пример XLS файла (или csv),
а также пример вызова myutil.exe с передачей аргументов (для любой строки приложенного примера).
1
|
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 4
|
|
13.05.2015, 18:40 [ТС] | 3 |
Вот такой пример xls:
Из него надо последовательно выбрать из каждой строки следующие ячейки: FileName, BrandName, Name2, Sum1, Sum2, Attrib2, Attrib4 командная строка для обработки должна быть такой: myutil.exe -param0 (номер строки начала обработки, по умолчанию = 1) -param1 Filename -param2 BrandName -param3 Name2 -param4 Attrib2 -param5 (if Attrib4=0 then Sum1 OR then Sum2) -param6 (if Attrib4=0 then "AAA" OR then "BBB") после окончания работы myutil проверить возвращаемый %errorlevel% и если он равен 0 - то перейти к обработке следующей строки, если не равен - сделать goto на обработчики ошибок (это я сам вроде сделал...) Спасибо за помощь.
0
|
5983 / 1992 / 323
Регистрация: 10.12.2013
Сообщений: 6,863
|
|
15.05.2015, 17:31 | 4 |
1
|
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 4
|
|
15.05.2015, 22:50 [ТС] | 5 |
Эта реплика как-то касается данной темы?
0
|
5983 / 1992 / 323
Регистрация: 10.12.2013
Сообщений: 6,863
|
|
16.05.2015, 04:15 | 6 |
как разведчик разведчику скажу, мелочей нет, важно буквально всё.
Ну а реализацию задачи разбора xls / csv, да и всего остального, впрочем, тоже, я бы выполнил с помощью настоящих инструментальных средств*, которые приняли на вооружение вместо ватников, пока Schtirliz mit Kat бились за победу в тылу врага. * perl, powershell, python. у всех вышеупомянутых языков есть удобные средства для работы с xls и csv. а строк в файле может быть хоть сто тыщ, не сильно замедлит.
1
|
16.05.2015, 11:46 | 7 |
Пробовал решить данный вопрос через powershell (в котором у меня пока весьма скромная практика)- думал, что все получилось, когда тестил на своем файле из двух строк. Однако на предложенном Example0.xls скрипт не работает, так как файл почему-то разбивается (через объект excel.application) в csv не на две, а на четыре строки, что рушит всю дальнейшую логику извлечения значений по индексам из массива, куда упаковывается каждое значение строки разделенной по точке с запятой.
Адресуйте свой вопрос в раздел по powershell - возможно, там решение будет скорей найдено.
1
|
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
|
||||||
16.05.2015, 14:55 | 8 | |||||
Сообщение было отмечено Schtirliz как решение
Решение
это была страшная военная тайна - теперь чтобы искупить вину перед Родиной заставят переписывать ядро линукса на повершелле
Schtirliz, на vbs ваш скрипт будет примерно таким: Кликните здесь для просмотра всего текста
4
|
16.05.2015, 19:44 | 9 | |||||
Сообщение было отмечено Schtirliz как решение
Решение
Или тоже самое через драйвер базы данных:
4
|
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
|
|
16.05.2015, 23:26 | 10 |
buggydancer, совет: вместо операции сравнения вида Cells(nRow, 1).Value <> "" лучше использовать функцию IsEmpty(Cells(nRow, 1).Value), т.к. она работает быстрее.
3
|
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 4
|
|
17.05.2015, 11:09 [ТС] | 11 |
Большое спасибо за помощь buggydancer, Dragokas!
0
|
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
|
|
17.05.2015, 14:43 | 12 |
Спасибо! давно я с Экселем не работал - все забыл.
может в современном Excel это и так, просто раньше 65535 (2^16) строк был предел (если конечно я опять ничего не путаю) тут-то IsEmpty() очень пригодится Schtirliz, всегда пожалуйста!
1
|
2618 / 548 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
|
|
17.05.2015, 16:27 | 14 |
Совсем забыл о том, что в ячейке может находиться формула, возвращающая пустую строку. В этом случае использование выражения Cells(nRow, 1).Value <> "" становится вполне приемлемым вариантом.
2
|
5983 / 1992 / 323
Регистрация: 10.12.2013
Сообщений: 6,863
|
|
18.05.2015, 01:36 | 15 |
Если есть такая возможность,
предпочту сохранение в CSV разборке XLS, пусть уж они( майкрософтовские индусы) сами решат проблемы пустых ячеек и всяких привязанных к ней форматов, а мне достанется несложный разбор текстового файла с разделителями.
2
|
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
|
|
18.05.2015, 20:38 | 16 |
Безусловно текстовый файл разбирать привычнее (да и приятнее что-ли) только вот сталкивался с CSV (правда из 1С а не из Excel) в котором и разделитель то уникальный нельзя было поставить - в полях была вся печатная часть ASCII - пришлось делать 2 CSV с разными разделителями чтобы потом их сопоставлять для неоднозначных строк (это было когда наш 1С-ник не участвовал - приходилось выкручиваться самому)
1
|
5983 / 1992 / 323
Регистрация: 10.12.2013
Сообщений: 6,863
|
||||||
19.05.2015, 04:53 | 18 | |||||
0
|
5983 / 1992 / 323
Регистрация: 10.12.2013
Сообщений: 6,863
|
|
19.05.2015, 21:42 | 20 |
Dragokas, может я непонятно формулирую ?
сохраняет XLS в CSV сам Excel, то есть, если переходить на личности, сами разработчики данного продукта и кому как не им знать, как правильно обработать значения в ячейках при переводе их в простой текстовый вид, который доступен для разбора и слону, и даже маленькой улитке.
0
|
19.05.2015, 21:42 | |
19.05.2015, 21:42 | |
Помогаю со студенческими работами здесь
20
Как вывести прайслист в формате xls или csv из 1С Импорт данных из xls или csv файла в БД MySql C# Exel(csv) в xls Сохранение xls в csv Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |