Страницы: 1
RSS
открыть текстовый файл в Excel в текстовом формате
 
Добрый день!  
 
Подскажите, пожалуйста, как открыть несколько текстовых файлов в Excel, чтобы данные были в текстовом формате    
(например, при выгрузке код 101104001110101540115401055105000 преобразуется в 1.01104001110101E+32, чего, соответственно быть не должно)
 
При импорте внешних данных есть возможность указать формат столбца - ставьте таким столбцам текстовый формат.
 
Sub Сбор_из_книг()  
 
Const strStartDir = "S:\" 'папка, с которой начать обзор файлов  
Const strSaveDir = "S:\" 'папка, в которую будет предложено сохранить результат  
Const blInsertNames = True 'вставлять строку заголовка (книга, лист) перед содержимым листа  
 
Dim wbTarget As New Workbook, wbSrc As Workbook, shSrc As Worksheet, shTarget As Worksheet, arFiles, _  
i As Integer, stbar As Boolean, clTarget As Range  
 
 
On Error Resume Next 'если указанный путь не существует, обзор начнется с пути по умолчанию  
ChDir strStartDir  
On Error GoTo 0  
With Application 'меньше писанины  
arFiles = .GetOpenFilename("Excel Files (*.xlsx), *.xlsx, Excel Files (*.xls), *.xls, Text Files (*.txt), *.txt ", , "Объединить файлы", , True)  
If Not IsArray(arFiles) Then End 'если не выбрано ни одного файла  
Set wbTarget = Workbooks.Add(template:=xlWorksheet)  
Set shTarget = wbTarget.Sheets(1)  
.ScreenUpdating = False  
stbar = .DisplayStatusBar  
.DisplayStatusBar = True  
 
For i = 1 To UBound(arFiles)  
.StatusBar = "Обработка файла " & i & " из " & UBound(arFiles)  
'shSrc.UsedRange.Copy  
'clTarget.PasteSpecial xlPasteValues  
'Application.CutCopyMode = False  
Set wbSrc = Workbooks.Open(arFiles(i), ReadOnly:=True)  
 
For Each shSrc In wbSrc.Worksheets  
 
If IsNull(shSrc.UsedRange.Text) Then 'лист не пустой  
 
   Cells.Select  
   Selection.NumberFormat = "@"  
 
Set clTarget = shTarget.Range("A1").Offset(shTarget.Range("A1").SpecialCells(xlCellTypeLastCell).Row, 0)  
If blInsertNames Then  
clTarget = ">>> " & wbSrc.Name & " -- " & shSrc.Name 'вставка имени файла  
Set clTarget = clTarget.Offset(1, 0) 'вставка имени файла  
End If 'вставка имени файла
 
Этот код открывает текстовые файлы в формате xlsx и копирует их в общий файл.  
 
Но при открытии файлов они уже открываются в некорректном формате
 
1. Нужно менять алгоритм - читать текст в массив, затем из массива выгружать данные на предварительно отформатированный лист.  
Или открывать текст через импорт внешних данных с форматированием столбцов.    
2. Чтоб сказать конкретнее - нужно видеть файлы. И код целиком - что Вы хотите в итоге получить, пока не понятно.
 
не знаю как сделать цикл((  
 
необходимо объединить несколько текстовых файлов в excel. текстовые файлы - это таблицы с разделителем.  
 
Sub test1()  
 
Const strStartDir = "S:\"  
Dim a As String  
 
a = "5.5.1.txt"  
 
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strStartDir & a, Destination:=Range("$A$2"))  
 
       .Name = a  
       .FieldNames = True  
       .RowNumbers = False  
       .FillAdjacentFormulas = False  
       .PreserveFormatting = True  
       .RefreshOnFileOpen = False  
       .RefreshStyle = xlInsertDeleteCells  
       .SavePassword = False  
       .SaveData = True  
       .AdjustColumnWidth = True  
       .RefreshPeriod = 0  
       .TextFilePromptOnRefresh = False  
        .TextFileStartRow = 1  
       .TextFileParseType = xlDelimited  
       .TextFileTextQualifier = xlTextQualifierDoubleQuote  
       .TextFileConsecutiveDelimiter = False  
       .TextFileTabDelimiter = True  
       .TextFileSemicolonDelimiter = False  
       .TextFileCommaDelimiter = False  
       .TextFileSpaceDelimiter = False  
       .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1)  
       .TextFileTrailingMinusNumbers = True  
       .Refresh BackgroundQuery:=False  
   End With  
End Sub
 
добавила текстовый файл
 
Можно так (если все файлы одного вида):  
 
Dim ra As Range  
 
и в цикле по файлам:  
 
Set ra = Range("A" & Rows.Count).End(xlUp).Offset(1)  
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strStartDir & a, Destination:=ra)  
...  
...
 
Спасибо, с циклами так и не разобралась - сделала вручную
 
Циклов по файлам может быть много разных, в зависимости от задачи и реализации -    
 
цикл по выбранным в диалоге файлам,  
 
цикл по всем файлам папки с помощью Dir(),  
 
цикл по всем файлам папки с помощью Scripting.FileSystemObject  
For Each f In CreateObject("Scripting.FileSystemObject").GetFolder("D:\1\").Files  
как вариант - Функция VBA для получения списка файлов из папки, с учётом выбранной глубины поиска в подпапках:  
http://excelvba.ru/code/FilenamesCollection  
 
цикл по предопределённому списку файлов (создаём массив с именами файлов, перебираем его в цикле).  
 
Выбирайте, что Вам нужно по задаче - на форуме все варианты можно найти.  
 
Ну а делать вручную - это тоже вариант. И кстати очень популярный :)
Страницы: 1
Читают тему
Наверх