2012-05-29 3 views
3

У меня есть большое количество файлов csv, которые мне нужны в формате .xls. Можно ли запустить пакетное преобразование с помощью макроса или лучше всего сделать на другом языке?Можно ли конвертировать csv в xls с помощью макроса?

Я использовал этот код http://www.ozgrid.com/forum/showthread.php?t=71409&p=369573#post369573 для ссылки на мой каталог, но я не уверен в команде, чтобы открыть каждый файл и сохранить их. Вот что у меня есть:

Sub batchconvertcsvxls() 
    Dim wb As Workbook 
    Dim CSVCount As Integer 
    Dim myVar As String 

    myVar = FileList("C:\Documents and Settings\alistairw\My Documents\csvxlstest") 
    For i = LBound(myVar) To UBound(myVar) 

     With wb 

      Application.Workbooks.OpenText 'How do I reference the myvar string ? 
      wb.SaveAs '.... 

     End With 

    Next 
End Sub 

Function FileList(fldr As String, Optional fltr As String = "*.*") As Variant 
    Dim sTemp As String, sHldr As String 
    If Right$(fldr, 1) <> "\" Then fldr = fldr & "\" 
    sTemp = Dir(fldr & fltr) 
    If sTemp = "" Then 
     FileList = Split("No files found", "|") 'ensures an array is returned 
     Exit Function 
    End If 
    Do 
     sHldr = Dir 
     If sHldr = "" Then Exit Do 
     sTemp = sTemp & "|" & sHldr 
    Loop 
    FileList = Split(sTemp, "|") 
End Function 

Edit: Файлы .txt файлы в формате CSV

+1

Интересная ссылка: http://www.softinterface.com/Convert-XLS % 5CFeatures% 5CConvert-CSV-To-XLS.htm Если вы ищете Google, есть другие программные средства, которые уже делают это. Однако, если вы делаете это как упражнение, тогда игнорируйте ссылку :) –

ответ

3

В много меньше строк кода, это вы должны получить то, что вы хотите. Однако я скажу, что это не самый быстрый способ сделать это, потому что вы каждый раз открываете, сохраняете и закрываете книгу. Я буду искать более быстрый способ, но я забываю метод с головы.

Sub batchconvertcsvxls() 

Dim wb As Workbook 
Dim strFile As String, strDir As String 

strDir = "C:\" 
strFile = Dir(strDir & "*.csv") 

Do While strFile <> "" 

    Set wb = Workbooks.Open(strDir & strFile) 
    With wb 
     .SaveAs Replace(wb.FullName, ".csv", ".xls"), 50 'UPDATE: 
     .Close True 
    End With 
    Set wb = Nothing 
Loop 

End Sub 

** UPDATE ** вам необходимо надлежащее FileFormat перечисление для файла .xls. Я думаю, что его 50, но вы можете проверить здесь Excel File Type Enumeration, если это не так.

+0

Извините, я должен сказать, что они являются .txt-файлами, отформатированными как csv. Изменил мой первоначальный вопрос. –

+0

Это все хорошо. Просто измените любую ссылку на .csv выше на .txt. –

+0

@AlistairWeir -> также добавить эту строку до «Loop» strFile = Dir –

2

Кодекс Скотта Хольцмана почти сделал это для меня. Я должен был внести два изменения, чтобы заставить его работать:

  1. Он забыл добавить строку, которая заставит наш цикл продолжить работу со следующим файлом. В последней строке перед Loop следует читать

    strFile = Dir

  2. метод Workbooks.Open не читать мои файлы CSV, как и ожидалось (вся линия закончилась на текст в первой ячейке). Когда я добавил параметр Local:=True он работал:

    Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)

5

Объединив код дал Скотт Гольцман и «ExcelFreak», преобразование работает достаточно хорошо. Окончательный код выглядит примерно так:

Sub CSV_to_XLS() 

Dim wb As Workbook 
Dim strFile As String, strDir As String 

strDir = "U:\path\" 
strFile = Dir(strDir & "*.csv") 

Do While strFile <> "" 

    Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True) 
    wb.SaveAs Replace(wb.FullName, ".csv", ".xls"), 50 'UPDATE: 
    wb.Close True 

    Set wb = Nothing 
    strFile = Dir 
Loop 

End Sub 

Открытие преобразованного файла .xls броски предупреждение каждый раз:

«Файл, который вы пытаетесь открыть,„имя файла“, находится в другом формате, чем указано по расширению файла. Убедитесь, что файл не поврежден и находится из надежного источника перед открытием файла. Вы хотите открыть файл сейчас? "

Нажмите «Да», затем откроется файл .xls.

Есть ли способ избавиться от этого предупреждения? Excel выдает предупреждение каждый раз, когда открывается файл .xls.

+0

wb.SaveAs Заменить (wb.FullName, ".csv", ".xls"), 56 'UPDATE: сохранит его как 97-2003 excel формат и избавиться от предупреждения –

+0

Вы также можете использовать 'wb.SaveAs Replace (wb.FullName, .csv", ".xlsx"), 51 'UPDATE: ', который будет сохраняться в формате Excel 2007 и избавиться от предупреждение при открытии файла. –

0

Это работает правильно, по крайней мере, в Excel 2013. Параметр FileFormat: = xlExcel8 вместо тега 50 файла создает файлы, которые открываются без защитных nags.

Sub CSV_to_XLS()

Dim термометру Как Workbook Dim strFile As String, strDir As String

strDir = "C: \ Temp \" strFile = Dir (strDir & "* .csv")

Do Хотя strFile <> ""

Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True) 
wb.SaveAs Replace(wb.FullName, ".csv", ".xls"), FileFormat:=xlExcel8 
wb.Close True 

Set wb = Nothing 
strFile = Dir 

Loop

End Sub

0

Это был хороший вопрос, и я нашел в Интернете несколько ответов. Просто делая очень небольшие изменения (я не мог редактировать любой из кодов, уже опубликованных) я мог бы сделать вещи работать немного лучше:

Sub CSV_to_XLSX() 

Dim wb As Workbook 
Dim strFile As String, strDir As String 

strDir = "C:\Users\acer\OneDrive\Doctorado\Study 1\data\Retest Bkp\Day 1\Sart\" 
strFile = Dir(strDir & "*.csv") 

Do While strFile <> "" 

    Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True) 
    With wb 
     .SaveAs Replace(wb.FullName, ".csv", ".xlsx"), 51 
     .Close True 
    End With 
    Set wb = Nothing 
    strFile = Dir 
Loop 

End Sub