Экспорт и переформатирование данных из MS Excel - PullRequest
0 голосов
/ 18 мая 2010

У меня есть огромная электронная таблица Excel, в которой указаны тарифы на телефонные звонки в разные страны.

Формат столбцов: Страна, Курс Локальность, Префиксы, Курс, Опт

например. Афганистан, по умолчанию 93, 930; 931; 9321; 9322; 9323; 9324; 9324; 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, "Afganistan", 93, "По умолчанию", 1.023,60,1.023,10 00, "Afganistan", 931, "По умолчанию", 1.023,60,1.023,10 ... 00, "Afganistan", 939, "По умолчанию", 1.023,60,1.023,10

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

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

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

Ответы [ 2 ]

1 голос
/ 18 мая 2010

Вы можете использовать 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

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

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

0 голосов
/ 18 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...