2010-05-18 3 views
0

У меня есть огромная электронная таблица Excel, содержащая тарифы на телефонные звонки в несколько разных стран.Экспорт и переформатирование данных из MS Excel

Формат столбцов: Страна, RateLocality, Приставки, скорость, Оптовая

например Афганистан, по умолчанию, 93, 930, 931, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9331, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9341, 9342 ; 9343; 9344; 9345; 9346; 9347; 9348; 9349; 9351; 9352; 9353; 9354; 9355; 9356; 9357; 9358; 9359; 9361; 9362; 9363; 9364; 9365; 9366; 9367; 9368; 9369 ; 9371; 9372; 9373; 9374; 9376; 938; 939; $ 1.023, $ 0.455

Эти тарифы меняются каждый раз так часто, и мне нужно получить их в другую систему, которая может импортировать их с помощью CSV.

Окончательный формат:

LD PREPEND CODE т.е.. 00 или 011, код страны, код зоны, комментарий, стоимость подключения, включенные секунды, стоимость за минуту, прейскурант, приращение

Итак, чтобы преобразовать эту строку, у меня было бы 00, «Афганистан», 93, «По умолчанию», , 1.023,60,1.023,10 00, «Афганистан», 931, «По умолчанию», 1.023,60,1.023,10 ... 00, «Афганистан», 939, «По умолчанию», 1.023,60,1.023 , 10

Где 00, 60 и 10 жестко закодированы и объединены с другими данными от excel.

Как я могу экспортировать эти данные в требуемый формат, учитывая, что мне нужно переформатировать его по мере его поступления.

Должен ли я экспортировать в XML и использовать XSLT или какой-либо другой процесс для обработки данных в CSV? Если это так, как мне это сделать просто и быстро.

ответ

1

Вы можете использовать VBA для записи данных в новую книгу, а затем сохранить их как CSV. Что-то вроде этого:

Sub ConvertRates() 

    Dim strCountry As String 
    Dim strRateLocality As String 
    Dim strCodes As String 
    Dim dblRate As Double 
    Dim dblWholesale As Double 
    Dim vntCodes As Variant 
    Dim i As Integer 
    Dim lngRow As Long 

    Dim rngData As Range 
    Dim rngRow As Range 
    Dim wks As Worksheet 
    Dim wkbkNew As Workbook 
    Dim wksNew As Worksheet 

    Set wks = ThisWorkbook.Worksheets("Sheet1") 
    Set rngData = wks.Range("A2:B3") 

    Application.Workbooks.Add 
    Set wkbkNew = ActiveWorkbook 
    Set wksNew = ActiveSheet 

    lngRow = 1 

    For Each rngRow In rngData.Rows 
     strCountry = wks.Cells(rngRow.Row, 1).Value 
     strRateLocality = wks.Cells(rngRow.Row, 2).Value 
     strCodes = wks.Cells(rngRow.Row, 3).Value 
     dblRate = wks.Cells(rngRow.Row, 4).Value 
     dblWholesale = wks.Cells(rngRow.Row, 5).Value 
     vntCodes = Split(strCodes, ";") 

     For i = 0 To UBound(vntCodes) 
      If vntCodes(i) <> "" Then 
       wksNew.Cells(lngRow, 1).Value = "'00" 
       wksNew.Cells(lngRow, 2).Value = strCountry 
       wksNew.Cells(lngRow, 3).Value = vntCodes(i) 
       wksNew.Cells(lngRow, 4).Value = strRateLocality 
       wksNew.Cells(lngRow, 5).Value = dblRate 
       wksNew.Cells(lngRow, 6).Value = 60 
       wksNew.Cells(lngRow, 7).Value = dblRate 
       wksNew.Cells(lngRow, 8).Value = 10 
       lngRow = lngRow + 1 
      End If 
     Next i 

    Next rngRow 

End Sub 

Вы, вероятно, понадобится, если заявление, чтобы определить, хотите ли вы, чтобы написать '00 или «011, и, очевидно, изменить код, чтобы использовать соответствующую таблицу и диапазон.

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

+0

Спасибо, только немного подстроив, что сделало трюк. – Matt

0

Я не понимаю, почему вы не будете использовать file-> save as, изменив формат на csv и впоследствии изменив csv скриптом. Большинство языков сценариев имеют хорошие инструменты для чтения в файлах CSV и их модификации (R, python и т. Д.)

+0

Так я и собирался это сделать, но оказалось, что ответ дендарий работает почти из коробки и быстро реализуется. – Matt

Смежные вопросы