从MS Excel导出和重新格式化数据

时间:2010-05-18 03:24:01

标签: xml excel-2007

我有一个巨大的Excel电子表格,其中包含许多不同国家/地区的电话费率。

列的格式为: 国家,RateLocality,前缀,费率,批发

e.g。 Afganistan,Default,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,CountryCode,区号,注释,连接成本,包含秒数,每分钟成本,价目表,增量

所以转换上面那行我会有 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吗? 如果是这种情况,我该如何简单快速地完成。

2 个答案:

答案 0 :(得分: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

您可能需要if语句来确定是否要编写'00或'011,并且显然要更改代码以使用相关的工作表和范围。

我没有内置大量测试,除了检查以确保代码不为空,因为您似乎在代码列表的末尾有一个分号,但您可能希望在将数据写入新工作簿之前进行更多检查。

答案 1 :(得分:0)

我不明白你为什么不使用file-&gt;另存为,将格式更改为csv并随后用脚本修改csv。大多数脚本语言都有很好的工具可以读取CSV文件并修改它们(R,python等)