Что нового

[Автоматизация] Данные из Excel обработать и Сохранить в m3u

КашаК

Новичок
Сообщения
15
Репутация
0
Имеется фаил Excel (xlsx), с списком каналов. Обычно 1 и 2 столбец, название канала и адрес.(остальные столбцы не интересны), количество строк неизвестно.
Нужно получить фаил (m3u) такого вида:
Код:
#EXTM3U
#PLAYLIST: IPTV
#EXTINF:-1,Название1 
udp://@Адрес1
#EXTINF:-1,Название2
udp://@Адрес2

Подскажите как это лучше организовать? Подозреваю, что в цикле, но с циклами плохо дружу...
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Дайте примеры файлов - excel и того, что на выходе должно быть.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
КашаК

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Пробуйте
Код:
#include <Excel.au3>
#include <File.au3>

Local $Path_Excel = FileOpenDialog("Выберите файл Excel", @ScriptDir, "Файл Excel (*.xlsx)", 1);Диалог выбора файла Excel
If Not @error Then
	Local $oExcel = _Excel_Open(False);Создаём экземпляр Excel в невидимом режиме 
	Local $oWorkbook = _Excel_BookOpen($oExcel, $Path_Excel);Открываем книгу Excel
	Local $aExcel = _Excel_RangeRead($oWorkbook);Чтение файла Excel в массив $aExcel
	_Excel_Close($oExcel);Закрываем экземпляр Excel

	If IsArray($aExcel) Then ;если массив $aExcel создался - прочитан файл, то:
		Dim $aResult[UBound($aExcel) * 2];Объявляем массив - результат с количеством элементов в два раза больше, чем строк в $aExcel
		$aResult[0] = '#EXTM3U';Первая строка результата всегда такая будет
		$aResult[1] = '#PLAYLIST: IPTV';вторая строка результато тоже всегда такая
		For $i = 1 To UBound($aExcel) - 1;Цикл - перебираем все элементы массива $aExcel начиная с 1-го, так , как в "0" - название колонок
			$aResult[$i * 2] = '#EXTINF:-1,' & $aExcel[$i][0] ;Нечётные строки, начиная с 3-й -это первая колонка в Excel(она-же нулевая в массиве)
			$aResult[$i * 2 + 1] = 'udp://@' & $aExcel[$i][1] ;Чётные строки, начиная с 4-й -это вторая колонка в Excel(она-же первая в массиве)
		Next ;следующая строка
		$NewFile = InputBox("Внимание !", "Ведите название файла-результата (без расширения)");диалог на ввод названия для нового файла 
		$File_m3u = $NewFile & '.m3u';дописываем расширение m3u к выбраному названию

		If Not FileExists($File_m3u) Then ;Если нет файла m3u , то 
			_FileCreate($File_m3u) ;создаём его, если есть, то ничего не будет, скрипт просто завершится.
			_FileWriteFromArray($File_m3u, $aResult);Запись массива в вновь созданный файл m3u
		EndIf

	EndIf

EndIf
 
Автор
К

КашаК

Новичок
Сообщения
15
Репутация
0
Спасибо, код отлично сработал.

Спасибо, за пояснения!
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Дописал комментарии - изменил в предыдущем посте
 
Верх