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





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









Вопросов: 3
Ответов: 8
      
 Профиль |  | #7
       
Добавлено:  13.07.07 16:23
       
    
       
  
Дело в том, что вижу VBA третий раз в жизни, грубо говоря, да и времени искать и разбираться совсем нету. Помогите плз.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: EUGY
 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
 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.
Большое спасибо за помощь.