Страницы: 1
RSS
Выгрузка из excel в текстовый документ
 
Уважаемые специалисты  по vbа, подскажите, пожалуйста, каким образом написать макрос по циклической выгрузке данных из excel в файл текстового формата.
 
Экспорт выделенного диапазона в txt-файл в ту же папку, что и файл-источник:  
 
Sub ExportRange()  
   Dim Filename As String  
   Dim NumRows As Long, NumCols As Integer  
   Dim r As Long, c As Integer  
   Dim Data  
   Dim ExpRng As Range  
 
   Set ExpRng = Selection  
   NumCols = ExpRng.Columns.Count  
   NumRows = ExpRng.Rows.Count  
   Filename = ThisWorkbook.Path & "\textfile.txt"  
   Open Filename For Output As #1  
       For r = 1 To NumRows  
           For c = 1 To NumCols  
               Data = ExpRng.Cells(r, c).Value  
               If IsNumeric(Data) Then Data = Val(Data)  
               If IsEmpty(ExpRng.Cells(r, c)) Then Data = ""  
               If c <> NumCols Then  
                   Write #1, Data;  
               Else  
                   Write #1, Data  
               End If  
           Next c  
       Next r  
   Close #1  
End Sub
 
Выгруженные строки почему-то закавычиваются в начале и конце. Как это можно исправить? Еще раз большое спасибо за помощь
 
Попробуй в ворде пройтись "НАЙТИ И ЗАМЕНИТЬ"
 
{quote}{login=finic2000}{date=12.12.2009 10:28}{post}Выгруженные строки почему-то закавычиваются в начале и конце. {/post}{/quote}  
Это происходит из-за того, что в первоначальном Selection есть пустые ячейки
 
Я специально проверил выделение. Выделяю всего 2 ячейки для проверки, выгруженные строки все-равно закавычиваются.  
 
И еще вопрос: как сделать так, чтобы с определенной периодичностью  (например,3 сек) происходила эта выгрузка в txt-файл?  
 
Большое спасибо за помощь!
 
Dim След  
 
Sub Экспорт()  
   ........ основной код!  
 
'   Запускает следующее событие через 3 секунды после настоящего  
   След = Now + TimeValue("00:00:03")  
   Application.OnTime След, "Экспорт"  
End Sub  
 
Sub Останов()  
  On Error Resume Next  
  Application.OnTime След, "Экспорт", , False  
End Sub
 
Все заработало, но, к сожалению проблема с кавычками осталась. Не знаете, как решить?
 
Судя по-всему, эти кавычки - какая-то  системная чепуха.  
У меня 'закавычиваются' именно текстовые ячейки, с числами все нормально - они идут ч/з запятую.  
Я думаю, надо копать глубже...
 
{quote}{login=finic2000}{date=12.12.2009 03:24}{thema=Выгрузка из excel в текстовый документ}{post}Уважаемые специалисты  по vbа, подскажите, пожалуйста, каким образом написать макрос по циклической выгрузке данных из excel в файл текстового формата.{/post}{/quote}  
А если просто через .SaveAs Filename:="zzzzzz", FileFormat:=xlCSV, CreateBackup:=False......?  
c FileFormat можно поэкспериментироватью
 
{quote}{login=аналитик}{date=15.12.2009 01:04}{post}Судя по-всему, эти кавычки - какая-то  системная чепуха...{/post}{/quote}  
Кстати, если вручную откопипровать в текстовый файл выделенный фрагмент, то кавычки не появляются
 
{quote}{login=Nicks}{date=15.12.2009 06:26}{thema=Re: Выгрузка из excel в текстовый документ}{post}А если просто через .SaveAs Filename:="zzzzzz", FileFormat:=xlCSV, CreateBackup:=False......?  
c FileFormat можно поэкспериментироватью{/post}{/quote}  
А в какую часть кода поставить эту строку?
 
Ну перед .SaveAs та книга которую хотите сохранить. Либо по индексу, либо по назвнию. Либо ActiveWorkbook. Как требуется
 
{quote}{login=Nicks}{date=15.12.2009 08:36}{thema=}{post}Ну перед .SaveAs та книга которую хотите сохранить. Либо по индексу, либо по назвнию. Либо ActiveWorkbook. Как требуется{/post}{/quote}  
 
Вас не затруднит написать код целиком если файл с выгрузкаой находится в той же папке что и эксель-файл и называется "файл.txt"?
 
{quote}{login=finic2000}{date=14.12.2009 10:32}{thema=Заработало}{post}Все заработало, но, к сожалению проблема с кавычками осталась. Не знаете, как решить?  
{/post}{/quote}  
 
Попробуйте изменить    
Write #1, Data;  
 
например на  
Print #1, Data, ;  
или  
Print #1, Data & " ";  
 
Всё зависит от того в каком виде хотите видеть информацию.
 
Попробывал оба варианта. к сожалению, кавычит, все равно
 
А ты оба Write-а поменял?  
Я заменил на Print (Виталий - спасибо) и всё - никаких кавычек.
 
Извините, не сразу заметил второй write. Теперь работает, это просто здорово Теперь можно двигаться вперед! Всем принимавшим участие в решении моей проблемы большое спасибо!
 
{quote}{login=}{date=15.12.2009 10:22}{thema=Re: }{post}{quote}{login=Nicks}{date=15.12.2009 08:36}{thema=}{post}Ну перед .SaveAs та книга которую хотите сохранить. Либо по индексу, либо по назвнию. Либо ActiveWorkbook. Как требуется{/post}{/quote}  
 
Вас не затруднит написать код целиком если файл с выгрузкаой находится в той же папке что и эксель-файл и называется "файл.txt"?{/post}{/quote}  
 
Как пример - макрос сохраняет в CSV все файлы EXCEL в папке wDir    
Dim wDir As String  
Dim cvName As String  
'  With Application.FileDialog(msoFileDialogFolderPicker)  
   wDir = "d:\temp"  
'  End With  
 
 Set fs = Application.FileSearch  
 Application.ScreenUpdating = False  
       ' Application.Screen.MousePointer = vbHourglass  
With fs  
   .LookIn = wDir  
   .FileType = msoFileTypeExcelWorkbooks  
   .Execute  
End With  
  If fs.Execute() > 0 Then  
       MsgBox "Найдено " & fs.FoundFiles.Count & " файлов."  
       For i = 1 To fs.FoundFiles.Count  
            Application.Workbooks.Open Filename:=fs.FoundFiles(i), ReadOnly:=True  
            For Each w In Workbooks  
                  If w.FullName = fs.FoundFiles(i) Then  
                     cvName = Left(fs.FoundFiles(i), Len(Trim(fs.FoundFiles(i))) - 4) & "_csv.csv"  
                      w.SaveAs Filename:=cvName, FileFormat:=xlCSV, CreateBackup:=False, TextCodepage:=1251  
                      w.Close savechanges:=True  
                 End If  
           Next w  
        Next i  
   Else  
       MsgBox "Файлов EXCEL не найдено."  
   End If  
     ' Screen.MousePointer = vbDefault  
Application.ScreenUpdating = True
 
В коде из сообщения 2 следует заменить строку    
If IsNumeric(Data) Then Data = Val(Data)  
на  
If IsNumeric(Data) Then Data = Trim(Str(Data)) при использовании print вместо write.  
Иначе появляется пробел в txt-файле перед любым числовым значением на листе Excel.
Страницы: 1
Читают тему
Наверх