Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Копирование столбцов из .xls и сохранение в файл 
Author Message
Batya



PostPosted: Mon Dec 14, 2009 17:23    Post subject: Reply with quote

Andrey_A
Недавно пришлось делать для себя нечто похожее.
После дорабатывания под твою задачу получился следующий vbs:
Code:
'=============================================================
' Создание txt-файла из xls-файла

' Параметры скрипта:
' {excel-файл} {txt-файл}
'=============================================================
Option Explicit
'=============== Изменяемые параметры ========================
Const ReplNewLine = "|" 'Символ для замены переносов строк
Const SheetName   = "Test" 'Имя листа для сохранения
'=============================================================

Dim FSO, XlsFile, objXL, TxtFile
Set FSO   = CreateObject("Scripting.FileSystemObject")
Set objXL = CreateObject("Excel.Application")

CheckParams

On Error Resume Next
objXL.DisplayAlerts = False
objXL.Workbooks.Open XlsFile
If Err.Number > 0 Then Quit

Main
If Err.Number > 0 Then MsgBox Err.Description, 0, "Xls2Txt"
On Error Goto 0

objXL.Quit()

WScript.Sleep 1000

On Error Resume Next
ReplInTxtFile
On Error Goto 0

Quit

'===== Процедуры и функции ===================================
'Основная процедура
Sub Main
  'Переходим на нужный лист
  objXL.Sheets(SheetName).Select

  'Убираем лишние данные
  objXL.Range("A1", "A65536" ).Delete
  objXL.Range("E1", "IV65536").Delete

  'Заменяем переносы строк в ячейках
  objXL.Range("A1", "IV65536").Replace Chr(10), ReplNewLine
  objXL.Range("A1", "IV65536").Replace Chr(13), ReplNewLine
  objXL.Range("A1", "IV65536").Replace ReplNewLine & ReplNewLine, ReplNewLine

  If FSO.FileExists(TxtFile) Then FSO.DeleteFile TxtFile, True

  'Сохранение результатов
  objXL.Application.ActiveWorkbook.SaveAs TxtFile, -4158
End Sub

'Дополнительная обработка итогового txt-файла
Sub ReplInTxtFile
  Dim lText
  lText = FSO.OpenTextFile(TxtFile).ReadAll
  lText = Replace(lText, ReplNewLine & vbTab, vbTab)
  FSO.OpenTextFile(TxtFile, 2).Write lText
End Sub

'Проверка входных параметров
Sub CheckParams
  With WScript
    If .Arguments.Count < 2 Then Quit
    XlsFile = .Arguments(0)
    If Not FSO.FileExists(XlsFile) Then Quit
    TxtFile = .Arguments(1)
  End With
End Sub

'Выход
Sub Quit
  Set objXL = Nothing
  Set FSO   = Nothing
  WScript.Quit
End Sub

Мне для своей задачи нужно было еще удалить переносы строк в ячейках. Здесть тоже оставил, иначе строчки поедут.
_________________
Нет, я не сплю. Я просто медленно моргаю.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group