Что нового

Как открыть CSV-файл(TXT) в Excel

frazier1979

Новичок
Сообщения
8
Репутация
0
Версия AutoIT 3.3.0.0

Пытаюсь открыть текстовый файл с помощью Excel следующим образом
Код:
$oExcel = ObjCreate('Excel.Application')
With $oExcel
    $oExcel.Visible = True
    $oExcel.Workbooks.Add
    $oExcel.Workbooks.OpenText filename:="d:\input_text.txt"


выдает при отладке выдает ошибку

D:\time\hlam\script\Auto_IT\utility\text\teast2.au3 (13) : ==> Missing separator character after keyword.:
$oExcel.Workbooks.OpenText filename:="d:\input_text.txt"
$oExcel.Workbooks.OpenText filename^ ERROR


Конструкция
Код:
$oExcel.Workbooks.OpenText filename:="d:\input_text.txt"

была взята из рабочего макроса Excel
там было:

Workbooks.OpenText filename:= "d:\input_text.txt"

Если убрать filename:= и добавить вокруг имени файла скобки
Код:
$oExcel.Workbooks.OpenText ("d:\input_text.txt")

то файл открывает, правда открывает автоматом и разделители ставит не там где нужно.

Следовательно есть отличия в синтаксисе "родном" VBA и в том, что используется в AutiIT.
Как возможно открыть текстовый файл в Excel используя в качестве разделителя данных по столбцам символ "|"?
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Re: не могу открыть текстовый файл в Excel

Не знаю, как правильно. Могу предложить прочитать данные из TXT, создать новый Excel файл и вставить данные вручную, как необходимо.

В принципе, не сложно. Разбить прочитанные данные из TXT: StringSplit.
Запись в ячейки Excel: _ExcelWriteCell.

Кстати, в справке по UDF есть уже готовые функции работы с Excel.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: не могу открыть текстовый файл в Excel

frazier1979
С Вашим файлом input_text.txt у меня так получилось (Office 2003):
Код:
;#include <Array.au3>
#include <Excel.au3>

$sFileTxt = @ScriptDir & '\input_text.txt'
$sFileXls = @ScriptDir & '\result.xls'

$hFile = FileOpen($sFileTxt, 0)
If $hFile = -1 Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
$sText = FileRead($hFile)
FileClose($hFile)

$aTemp = StringSplit(StringStripCR($sText), @LF)
If Not IsArray($aTemp) Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
$aTemp_1 = StringSplit($aTemp[1], '|')
If Not IsArray($aTemp_1) Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
Dim $aResult[$aTemp[0]][$aTemp_1[0]]
For $i = 1 To $aTemp[0]
	$aTempArray = StringSplit($aTemp[$i], '|')
	If Not IsArray($aTempArray) Then
		MsgBox(16, 'Error', 'Error')
		Exit
	EndIf
	For $j = 1 To $aTempArray[0]
		$aResult[$i - 1][$j - 1] = $aTempArray[$j]
	Next
Next
;_ArrayDisplay($aResult)
$oExcel = _ExcelBookNew(1); 0 - Hide
_ExcelSheetNameSet($oExcel, 'Общее')
_ExcelWriteSheetFromArray($oExcel, $aResult, 1, 1, 0, 0)
$oExcel.ActiveCell.Range('1:1' ).Select
$oExcel.Selection.AutoFilter
$oExcel.Selection.EntireColumn.AutoFit
$oExcel.ActiveCell.Range('A1' ).Select
_ExcelBookSaveAs($oExcel, $sFileXls, 'xls', 0, 1)
;_ExcelBookClose($oExcel)
 
Автор
F

frazier1979

Новичок
Сообщения
8
Репутация
0
Re: не могу открыть текстовый файл в Excel

Да, большое Вам спасибо, работает даже в 2007 офисе

Отсталось только разобраться как применить в Екзель файле фильтр по соответствующему параметру (столбцу)
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
frazier1979
Кстати, еще проще метод:
1. Заменить все знаки разделителя на ; (точку с запятой).
2. Переименовать расширение TXT файла в CVS.
3. Открыть стандартным образом CSV файл в Excel.
 
Автор
F

frazier1979

Новичок
Сообщения
8
Репутация
0
Чтобы было понятно, о чем идет речь, прикреплю исходный файл.
Однако возникает еще вопрос, как для данного файла вычислить количество определенных "Класс Устройства" и "Тип Устройства" для определенных "Подр", для того, чтобы записать в Excel на отдельный лист, в виде отчета:

Класс Устройства Тип устройства
Подр. Системный блок Периферия Ноутбук Пром ПК
201 ххх nnn vvv ppp
204 yyy zzz ggg ccc
 
Верх