Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: xls конвертировать в csv Добавлено: 11.07.07 18:13  

Автор вопроса:  Черкашин
На данный момент есть около ста маленьких файлов *.xls (анкетка 18*3). Задача: переконвертировать их в *.csv для удобства помещения в БД и дальнейшей работы с ней. Как это сделать с наименьшими затратами времени и сил? Если есть конкретные средства, то огромная просьба, давать конкретные живые ссылки. Фаил - Сохранить как... *.csv не подходит по понятным причинам. Надо все сразу, даже желательно в один фаил :)
Заранее спасибо.

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #1 Добавлено: 11.07.07 18:35
Фаил - Сохранить как... *.csv не подходит по понятным причинам


Вот и напрасно:
ThisWorkbook.SaveAs "C:\file1.csv", xlCSV

Ответить

Номер ответа: 2
Автор ответа:
 Черкашин



Вопросов: 3
Ответов: 8
 Профиль | | #2 Добавлено: 11.07.07 18:48
А подробней можно? Имена файлов не систематизированы и часто совсем не похожи. В идеале хотелось бы так: задать имя каталога (напр. "C:\xlss";), где лежат все эти файлы, запустить макрос и получить в итоге файлы file1.csv, file2.csv, C:\file3.csv... как Вы предлогаете.
Спасибо.

Ответить

Номер ответа: 3
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #3 Добавлено: 11.07.07 19:15

Option Explicit

Private Sub Command1_Click()
Dim s As String
Dim f As String
Dim ex As Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Dim x As Integer

Set ex = New Excel.Application
    
    s = "C:\xlss\"
    f = Dir(s)
Do

    If Len(f) = 0 Then Exit Do
    x = x + 1
    Debug.Print f
    Set wb = ex.Workbooks.Open(s & f)
    Set ws = wb.Worksheets(1)
    ws.SaveAs s & "file" & x, xlCSV
    wb.Close True
    Set ws = Nothing
    Set wb = Nothing
    f = Dir()
Loop

Set ex = Nothing
End Sub


Что-то вроде этого.
Можно бы и объединить.

Ответить

Номер ответа: 4
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #4 Добавлено: 11.07.07 22:11
Надо все сразу,


Option Explicit

Private Sub Command1_Click()
    Call BatchXlsToOneCsv("C:\xlss\", "mynewcsv.csv";)
    Shell "notepad " & "C:\xlss\" & "mynewcsv.csv", vbNormalFocus
End Sub

Private Function BatchXlsToOneCsv(initdir As String, MyCsvFile As String) As Integer
Dim f As String
Dim ex As Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Dim x As Integer
Dim iFile As Integer
Dim tmpFile As Integer
Dim tmpStr As String

On Error Resume Next

Kill initdir & MyCsvFile

Set ex = New Excel.Application
    ex.Visible = False
    f = Dir(initdir)
'-------------------------------------
Do While Len(f)
    If Right(f, 4) = ".xls" Then
        x = x + 1
        Set wb = ex.Workbooks.Open(initdir & f)
        Set ws = wb.Worksheets(1)
        Kill initdir & "file" & x & ".csv"
        ws.SaveAs initdir & "file" & x, xlCSV
        wb.Close True
        Set ws = Nothing
        Set wb = Nothing
    End If
    f = Dir()
Loop
'-------------------------------------
   f = Dir(initdir)
   iFile = FreeFile
   Open initdir & MyCsvFile For Append As iFile
    Do While Len(f)
        If Right(f, 4) = ".csv" Then
           tmpFile = FreeFile
           Open initdir & f For Input As tmpFile
           Do While Not EOF(tmpFile)
            Line Input #tmpFile, sss
            Print #iFile, sss
           Loop
           Close #tmpFile
        End If
        f = Dir()
    Loop
   Close #iFile
'-------------------------------------
   f = Dir(initdir)
    Do While Len(f)
        If Right(f, 4) = ".csv" And f <> MyCsvFile Then
          Kill initdir & f
        End If
        f = Dir()
    Loop
'-------------------------------------
Set ex = Nothing
End Function

Ответить

Номер ответа: 5
Автор ответа:
 Черкашин



Вопросов: 3
Ответов: 8
 Профиль | | #5 Добавлено: 12.07.07 17:00
Спасибо большое, файлы вроде переконвертились нормально, НО получил mynewcsv.csv размером более чем 2,7 Гб. Он видимо бы и дальше рос, если б не закончилось свободное место :)

Ответить

Номер ответа: 6
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #6 Добавлено: 12.07.07 18:24
Поищи у меня ошибку. Я вот вижу.

Ответить

Номер ответа: 7
Автор ответа:
 Черкашин



Вопросов: 3
Ответов: 8
 Профиль | | #7 Добавлено: 13.07.07 16:23
Дело в том, что вижу VBA третий раз в жизни, грубо говоря, да и времени искать и разбираться совсем нету. Помогите плз.

Ответить

Номер ответа: 8
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #8 Добавлено: 13.07.07 17:52
Вот в этом отрывке

Line Input #tmpFile, sss
Print #iFile, sss

переменная sss не объявлена, ее бы заменить на tmpStr.
Хотя странно, должно работать и так (если без option explicit)...
Покажи мне, как (и какие) ты кладешь параметры в BatchXlsToOneCsv.

Ответить

Номер ответа: 9
Автор ответа:
 Черкашин



Вопросов: 3
Ответов: 8
 Профиль | | #9 Добавлено: 13.07.07 18:05
C option explicit sss не кушалось. Я его убрал - заработало. Что значит "кладу"? Я ничего никуда не кладу :) просто запускаю макрос :)

Ответить

Номер ответа: 10
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #10 Добавлено: 13.07.07 18:17
А без иронии?
То есть у тебя директория "C:\xlss\" и пример ты не менял кроме option explicit?

Ответить

Номер ответа: 11
Автор ответа:
 Черкашин



Вопросов: 3
Ответов: 8
 Профиль | | #11 Добавлено: 16.07.07 14:35
Да, именно "C:\xlss\". Там файлы, вот пример:
Примечания
Фамилия Нестеренко Ваша фамилия
Имя Виталий Ваше имя
Отчество Петрович Ваше отчество
Филиал Конотопский филиал Филиал в котором вы работаете
Город Конотоп Город в котором вы работаете
Подразделение Конотопский филиал ТОВ"Виктория" Полное название подразделения
Должность Директор Название занимаемой должности
Внутренний телефон Нет Номер внутреннего телефона (если есть)
E-mail <favorit@inters.com.ua>, Ваш корпоративный адрес электронной почты
ICQ Нет Ваш номер ICQ (если есть)
Skype Нет Ваш ник Skype
Городской телефон 1 Нет Номер вашего рабочего телефона
Городской телефон 2 Нет Номер вашего воторого рабочего телефона
Домашний телефон Нет Ваш номер домашнего телефона
Факс Нет Номер факса
Мобильный телефон (корпоративный) 380676914958 Номер вашего корпоративного сотового телефона
Мобильный телефон (персональный) 380679247358 Номер вашего персонального сотового телефона


Кроме того, хотелось бы изменять сразу и структуру - нужно удалять полностью первый и третий столбик примечаний затем транспонировать оставшийся второй столбик в строку. Таким образом в конечном итоге нужно получить массив данных из всех файлов, собрать его в единую БД в формате csv.
Большое спасибо за помощь.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам