Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Вставка данных из текстового файла в таблицы Excel


Автор: SoleR 7.2.2009, 13:56
Уважаемые господа профи, помогите с макросом, а то сам я, походу, не осилю - c VBA плохо знаком, только начинаю :(

Задачка следующая: 
из SAP R/3 выгружаются данные и метаданные какой-либо таблицы в текстовый файл, дальше посредством загрузки из созданного текстовика всего, что было выгружено, при помощи макроса сформировать такую же таблицу в Excel. 

Буду очень признателен за помощь.   

Автор: Akina 7.2.2009, 15:57
Сервис - макрос - начать запись.
Выполнить импорт вручную.
Остановить запись и изучить полученный код.

Автор: FINANSIST 10.2.2009, 21:38
 smile Такой монстрилла как SAP R/3  не выгружает данные в формате Excel???
Да ну, быть не может smile !( smile )

Автор: SoleR 24.2.2009, 12:10
Цитата(FINANSIST @ 10.2.2009,  21:38)
smile Такой монстрилла как SAP R/3  не выгружает данные в формате Excel???
Да ну, быть не может

Выгружать то он выгружает, но делает это, насколько я знаю, только напрямую. В моем же задании требуется, чтобы в качестве "посредника" выступал текстовик. Вот в чем проблема...
Неужели никто ниче посоветовать не может, кроме того, что написал Akina? :(

Автор: ТоляМБА 24.2.2009, 13:02
SoleR, у тебя проблемы с загрузкой текстовика вручную в эксель или ты не знаешь как записать макрос или как привязать макрос к кнопке?
Тебе действительно совет нужен или чтобы за тебя всё сделали? Если второе то так и говори, если первое, то читай выше.

Автор: FINANSIST 24.2.2009, 15:18
Чтение\запись хоть из .txt  хоть из .ini через VBA - не проблема, могу скинуть код.
Вот только это будут именно данные, - без форматирования, сетки таблиц и прочего.

Автор: RockClimber 25.2.2009, 09:10
Цитата(SoleR @  24.2.2009,  12:10 Найти цитируемый пост)
Неужели никто ниче посоветовать не может, кроме того, что написал Akina? :(

А чего он такого написал? Начинаешь запись макроса, жмешь Данные-Импорт внешних данных-Импортировать данные, находишь текстовый файл. В диалоговом окне выбираешь нужные пункты, после завершения импорта останавливаешь запись и всего за минуту получаешь что-то типа такого:
Код

Sub Макрос2()
'
    Application.CutCopyMode = False
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\_work\18021532.txt", _
        Destination:=Range("A1"))
        .Name = "18021532"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 866
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Умелыми манипуляциями мышью и кнопкой F1 узнаёшь, что это за параметры и какие значения они могут принимать.

Автор: mihanik 25.2.2009, 21:45
SoleR, а собственные идеи показать?

Перенести тему в центр поддержки?

Автор: temr 2.3.2009, 21:25
если таблиц не много то просто переменуй *.txt   в *.xls 
ну а если их много и надо автоматизировать тогда поищи на форуме- было несколько тем как открывать текстовые файлы средствами ВБА

Автор: SoleR 3.3.2009, 13:04
ТоляМБА, если бы хотел, чтоб кто-то за меня все сделал - заказал бы всю работу и не парился. Хотцца ж самому чему-нить научится smile

FINANSIST, скинь, если не трудно.

RockClimber, спасибо, но это ж только для импорта данных, а как же быть с сеткой таблицы, форматированием и т.д.? :(

mihanik да-да, если можно  smile 

temr спасибо

Автор: RockClimber 3.3.2009, 13:54
Цитата(SoleR @  3.3.2009,  13:04 Найти цитируемый пост)
RockClimber, спасибо, но это ж только для импорта данных, а как же быть с сеткой таблицы, форматированием и т.д.? :(

Точно также - режимом записи макроса ("Сервис-Макрос-Начать запись", там же "Остановить запись"). Он прост как апельсин, а возможности дает огромные. Любое действие, выполняемое с клавиатуры/мыши (кроме Undo, разве что) программируется макросом.

Добавлено через 36 секунд
Собственно, 95% того, что я знаю, я узнал именно так.

Автор: SoleR 3.3.2009, 22:21
Цитата(RockClimber @ 3.3.2009,  13:54)
Точно также - режимом записи макроса ...

хм... спасибо за совет, буду пробовать 

Автор: temr 10.3.2009, 08:07
Вот привемер открытия тестового файла 
Код

  
  Sub opentext()
    dim prt_string as string
    Dim path_to_file as string
    Dim  prt_num_str  as long
    Dim prt_row as long
    
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Application.ScreenUpdating = False
    Dim fs, f, ts, s


    path_to_file ="c:\test.txt"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(path_to_file)
    
   Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
   Do While ts.AtEndOfStream <> True
    prt_string = ts.readline

   prt_num_str = prt_num_str + 1
   Loop
 
 prt_row = 1
Application.StatusBar = "IMPORTING PRT FILE.."
ReDim la(prt_num_str)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
   Do While ts.AtEndOfStream <> True
    la(prt_row) = ts.readline ' eto budet tvoi testovii file no uzhe zapisannii v massiv la()
   

   prt_row = prt_row + 1
   Loop


Application.StatusBar = ""
Application.ScreenUpdating = true

End Sub



Далее ты можешь делать с массивом la() что хочешь.
Код интересен тем что может открывать большие текстовые файлы ( самый большой открытый мною 300 мегабайт)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)