Страница: 1 |
Страница: 1 |
Вопрос: xls конвертировать в csv
Добавлено: 11.07.07 18:13
Автор вопроса: Черкашин
На данный момент есть около ста маленьких файлов *.xls (анкетка 18*3). Задача: переконвертировать их в *.csv для удобства помещения в БД и дальнейшей работы с ней. Как это сделать с наименьшими затратами времени и сил? Если есть конкретные средства, то огромная просьба, давать конкретные живые ссылки. Фаил - Сохранить как... *.csv не подходит по понятным причинам. Надо все сразу, даже желательно в один фаил :)
Заранее спасибо.
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 11.07.07 18:35
Вот и напрасно:
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.
Большое спасибо за помощь.