Что нового

[Данные, строки] выбор значений с файла excel по выбору без установленного excel

eus_deus

Новичок
Сообщения
118
Репутация
0
Здравствуйте!
Встретился интересный и нужный мне сейчас скрипт по выбору значений из файлов excel
Вот такой скрипт (где находил - не помню)
Код:
; CopyXlsInText.au3  
; ================   Описание   ===================================  
; Копирование из файлов XLS, XLSX строк, столбцов в текстовый файл  
; ================  Параметры ===================================  
; В командной строке  должно быть прописано 7 - 11 параметров:  
; - - - - - - - - - - - - - - - - - Обязательные - - - - - - - - - - - - - - - - - - - -  
; 1) Номер листа с какого считывать информацию  
; 2) С какой строки начать считывание  
; 3) С какого столбца начать считывание  
; 4) К-во считываемых рядов (строк) (0 - все)  
; 5) К-во считываемых колонок (столбцов)  
; 6) Путь\к\файлу.xls  
; 7) Путь\к\сохранению\файла.txt   
; (можно вводить пути с переменными окружения)  
; - - - - - - - - - - - - - - - Дополнительные  - - - - - - - - - - - - - - - - - - - -  
; 8) 1 = Удалять пустые строки   0 = оставить как есть  
; 9) строка-вставка между колонками  
; 10)  строка-вставка в начале строки  
; 11)  строка-вставка в конце строки  
; ================    Примеры    ===================================  
; 1 2 0 4 "%%COMMANDER_PATH%%\Files\Lists\CreateMenu\WcmMenuImage.xlsx" "%%COMMANDER_PATH%%\Text.ini"  
; 1 2 0 4 "%%COMMANDER_PATH%%\Files\Lists\CreateMenu\WcmMenuImage.xlsx" "%%COMMANDER_PATH%%\Text.ini" 1 "___" "| " " |"  
; 1 1 1 0 0 %P%N "%T%O.txt" 1 "   "    Копирование первого листа из xls под курсором в текстовый файл в соседнюю панель  
;  ; Автор:             Аверин Андрей  
; Версия:          1.0  (12.10.2010)  
; Mail:                 [email protected]  
; Site:                  http://tc-image.3dn.ru/forum/3-83-329-16-1330565367  
; ===============================================================  
#include <Excel.au3>  
If $CmdLine[0] < 7  Then    
MsgBox(16 + 262144, "Запись из табличного файла строк и столбцов в файл", _    "Не хватает параметров!" & @CRLF & "Должно быть минимум СЕМЬ, а у вас" & _    
$CmdLine[0] & @CRLF & "Пропишите и повторите попытку!" & @CRLF & _    
"Подробную информацию читайте в коментариях скрипта", 10)    
Exit  
Endif  
$List = Number($CmdLine[1])  
$StartRow = Number($CmdLine[2])  
$StartCol = Number($CmdLine[3])  
$RowCnt = Number($CmdLine[4]) 
$ColCnt = Number($CmdLine[5])  
$XlsFile = _TCHExpandEnv($CmdLine[6])  
$TxtFile = _TCHExpandEnv($CmdLine[7])  
$Text = ""  
$Insert = "" 
$Control = ""  
$Contr = 0  
$InsertRight = ""  
$InsertLeft = ""  
if $CmdLine[0] > 7 Then $Contr = $CmdLine[8]  
if $CmdLine[0] > 8 Then $Insert = $CmdLine[9]  
if $CmdLine[0] > 9 Then $InsertRight = $CmdLine[10]  
if $CmdLine[0] > 10 Then $InsertLeft = $CmdLine[11]  
; Открываем xls , считываем нужные строки, колонки и закрываем  
$oInFile = _ExcelBookOpen($XlsFile, 0, True)  
; номер листа  
$oInFile.Sheets($List).Select() 
$aData = _ExcelReadSheetToArray($oInFile, $StartRow, $StartCol, $RowCnt , $ColCnt)  
_ExcelBookClose($oInFile, 0)  
if $RowCnt = 0 Then $RowCnt = UBound($aData,1) - 1 
;размерность массива (к-во строк)  
if $ColCnt = 0 Then $ColCnt = UBound($aData,2) - 1 
;размерность массива (к-во колонок)  
; Открываем выходной файл для записи - с очисткой  
$hFile = FileOpen($TxtFile, 2)  
; Записываем  данные  
For $i=1 To $RowCnt      
For $j=1 To $ColCnt         
if $aData[$i][$j] = "" Then $aData[$i][$j] = ""         
$Text = $Text & StringFormat("%s", $aData[$i][$j]) & $Insert         $Control = $Control & $Insert      
Next      
; проверка на пустые строки      
if $Contr = 1 And StringCompare($Control, $Text,2) = 0 Then      
Else         
FileWriteLine($hFile, $InsertLeft & $Text & $InsertRight)      
Endif      
$Text = ""      
$Control = ""  
Next  
; функция разворачивания переменных окружения  
Func _TCHExpandEnv($sText)      
$aResult = StringRegExp($sText, "%(\w+)%", 3)      
If IsArray($aResult) Then          
For $i = 0 To UBound($aResult)-1              
$sText = StringReplace($sText, "%" & $aResult[$i] & "%", EnvGet($aResult[$i]))          
Next      
EndIf      
Return $sText  
EndFunc


Теперь, знатоки, внимание - вопрос! Можно ли что то подобное реализовать для машины, не имеющей на борту установленного excel ( или имеющей портативный excel)
Спасибо за внимание!
 

inx

Знающий
Сообщения
43
Репутация
12
XLS:
Без Excel, только основательно изучив этот документ:
http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat(xls)Specification.xps

С портативным не будет, там все по идее работает в своей виртуальной среде.
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
значит, никак - только почитать и написать новый excel :smile: :smile: :smile:
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
eus_deus
Если xlsx, то скорее всего можно через xml

Вот, например, чтение docx без Word:
http://autoit-script.ru/index.php?topic=15572.msg96970#msg96970
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
WSWR, так, получается, что в теории возможны такие фокусы...Будем посмотреть))
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
inx, это совсем близко, как я понимаю...


Добавлено:
Сообщение автоматически объединено:

пока не родилось...
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
не реализуется так как надо - нет параметров конца строк и столбцов ( типа задания диапазона, как в скрипте-примере - например, со 2 по 5 строку или с 1 по 3 столбец)
 
Верх