Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Парсинг xls таблицы. (https://javascript.ru/forum/misc/51399-parsing-xls-tablicy.html)

sx88 05.11.2014 20:24

Парсинг xls таблицы.
 
Всем доброго времени суток.
Подскажите в какую сторону копать: есть xls таблица, к примеру в ячейке А1 содержится наименование изделия (табуретка), в ячейке В1 стоит ее цена?
Если мне необходимо по условию найти "табуретка" и взять ее цену, как это реализовать? :D

kostyanet 05.11.2014 20:41

Файл что ли екзеля парсить собираетесь? ДЛя екзеля есть VBA. Для веба сохраните в html или xml. WScript еще есть.

kostyanet 05.11.2014 20:44

WSrcipt

var excel = new ActiveXObject("Excel.Application"); 
	var ws = excel.Workbooks.Open(file_name).Worksheets;


Воркбука вся ваша.

sx88 05.11.2014 21:17

Цитата:

Сообщение от kostyanet (Сообщение 339214)
WSrcipt

var excel = new ActiveXObject("Excel.Application"); 
	var ws = excel.Workbooks.Open(file_name).Worksheets;


Воркбука вся ваша.

"Профессор", что-то у вас карма отрицательная. Вы меня точно не обманываете? :haha: Шучу по-доброму.
А на самом деле: да, есть excel-файл. Необходимо вытянуть наменование = цена и передать эти параметры в html документ с ценами.
Думаю, как-то реализовать это через конвертацию xls в xml и через bash, perl вытягивать значения.

Aetae 05.11.2014 21:24

Лучше всего если конвертировать то в csv. Тогда с обработкой любым скриптовым языком ни малейших проблем не возникнет.:)
Иначе надо в любом случае искать готовые тяжеловесные библиотеки.

kostyanet 05.11.2014 21:26

Да вот такие как вы мне всю карму и обосрали. Шучу по-доброму. А на самом деле х проссышь где это файл, почему нет при нем екзеля, зачем ковырять бинарный формат, флешки что ли перестали выпускать или проволока в интернет оборвалась... ваше дело.

sx88 06.11.2014 19:00

Цитата:

Сообщение от kostyanet (Сообщение 339233)
Да вот такие как вы мне всю карму и обосрали. Шучу по-доброму. А на самом деле х проссышь где это файл, почему нет при нем екзеля, зачем ковырять бинарный формат, флешки что ли перестали выпускать или проволока в интернет оборвалась... ваше дело.

Хм:-? Не понял к чему это все. Спасибо за совет и уделенное время :victory:

Цитата:

Сообщение от Aetae (Сообщение 339232)
Лучше всего если конвертировать то в csv. Тогда с обработкой любым скриптовым языком ни малейших проблем не возникнет.:)
Иначе надо в любом случае искать готовые тяжеловесные библиотеки.

Да, идея хороша :) Проще парсить csv, по крайней мере вид удобочитаемый

kostyanet 06.11.2014 22:43

Оказалось что файл на руках! Уписаться можно, а сохранить его в хтмл и работать в его ДОМе - нельзя. Иначе в чем труд программиста будет заключаться? Это не считая что для xml наверно во всех языках есть встроенный парсер http://api.jquery.com/jquery.parsexml/

А как же чэсэвэ? А чсв это текст.

А как же WScript? А это не ява-скрипт, да?

kostyanet 06.11.2014 22:51

Дарю, осталось от одной тряхомудии. Собирает все данные, то есть со всех листов в текстовый файл разделитель табулятор. ВОт вам и чсв.

var total=0;
var ForReading = 1, ForWriting = 2, ForAppending = 8;
var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;

var WshShell = WScript.CreateObject("WScript.Shell");
strPath = WshShell.currentDirectory;

var fso = new ActiveXObject("Scripting.FileSystemObject");

open_excel();

function open_excel(){

	var file_name = fso.BuildPath(strPath, 'origin.xls');
	var excel = new ActiveXObject("Excel.Application"); 
	var ws = excel.Workbooks.Open(file_name).Worksheets;
	
	var res=[];
	
	for(var cnt=1; cnt<ws.Count; cnt++) {
	
		var sheet = ws(cnt);
		var row_cnt=0;
		
		while(true) {
			row_cnt++;
			var c = ''+sheet.Cells(row_cnt, 1).Value;
			if(c=='undefined')
				break;
			if(row_cnt > 65530)
				break;
			row=[];
			for(var j=1; j<8; j++)
				row.push(sheet.Cells(row_cnt,j).Value);
			res.push(row.join("\t"));
		}
	}
	excel.Quit();
	process(res);
	WScript.Echo('Total: '+cnt);
}

function process(res) {
	var out_file_name=fso.BuildPath(strPath, 'merge.txt');	
	var ts = fso.CreateTextFile(out_file_name, true, true);
	ts.Write(res.join("\n"));
	ts.Close();

}

sx88 09.11.2014 21:11

kostyanet , спасибо за "подгон" :))


Часовой пояс GMT +3, время: 22:17.