需要帮助从excel文件中提取数据

时间:2011-06-17 21:06:47

标签: database regex excel extract

我有一个包含类别及其产品列表的excel文件,每个产品都有一个关联价格。它的组织非常糟糕,就像这样:

  

汽车

     

斯巴鲁| $ 5200

     丰田| $ 4300

     雷克萨斯| $ 8600

     福特| $ 7580

     

货车

     

梅赛德斯| $ 12200

     

铃木| $ 8400

我基本上需要从这张表中提取数据并将其存储到mysql数据库中。 粗体中的所有内容都是一个类别,产品会列在一个类别下,直到遇到下一个类别。

所以在类别表上应该看起来像这样

id  title
-----------
1   Cars
2   Trucks

产品表就像这样

id  title     category_id price
---------------------------------
1   Subaru    1            5200
2   Toyota    1            4300
2   Lexus     1            8600
2   Ford      1            7580
2   Mercedes  2            12200
2   Suzuki    2            8400

我可以用什么工具/语言来做这件事并不重要。这是一次性提取。关于如何开始研究这个问题的任何指示都会非常有用。

3 个答案:

答案 0 :(得分:2)

对于一次性提取,使用vba将数据拆分为excel中的两个单独临时表,然后使用标准方法将数据插入数据库。

下面的代码假设数据位于名为“Data”的工作表中,并从单元格A1开始 添加两张名为“Catagory”和“Product”

的表格

代码循环遍历数据表,将每一行复制到正确的表格

Sub SplitData()
    Dim rData As Range
    Dim rCat As Range
    Dim rProd As Range
    Dim Cat As String
    Dim Prod As String
    Dim Price As Currency
    Dim Cat_ID As Long
    Dim Prod_ID As Long

    Set rData = ActiveWorkbook.Worksheets("Data").Cells(1, 1)
    Set rCat = ActiveWorkbook.Worksheets("Catagory").Cells(1, 1)
    Set rProd = ActiveWorkbook.Worksheets("Product").Cells(1, 1)

    rCat = "id"
    rCat.Offset(0, 1) = "title"
    Set rCat = rCat.Offset(1, 0)

    rProd = "id"
    rProd.Offset(0, 1) = "title"
    rProd.Offset(0, 2) = "catagory_id"
    rProd.Offset(0, 3) = "price"
    Set rProd = rProd.Offset(1, 0)

    Cat_ID = 0
    Prod_ID = 0

    Do While rData <> ""
        If rData.Font.Bold Then
            Cat = rData
            Cat_ID = Cat_ID + 1

            rCat = Cat_ID
            rCat.Offset(0, 1) = Cat

            Set rCat = rCat.Offset(1, 0)
        Else
            Prod = rData
            Price = rData.Offset(0, 1)
            Prod_ID = Prod_ID + 1

            rProd = Prod_ID
            rProd.Offset(0, 1) = Prod
            rProd.Offset(0, 2) = Cat_ID
            rProd.Offset(0, 3) = Price

            Set rProd = rProd.Offset(1, 0)
        End If
        Set rData = rData.Offset(1, 0)
    Loop


End Sub

答案 1 :(得分:0)

编辑:基于以下评论中描述的新要求。

在Excel中使用VBA执行以下操作。我将描述使用psudeo代码:

string saveCategory;
readrow columnA, ColumnB;
if (columnA is bold)
{
   saveCategory = columnA;
   write saveCategory to category table;
}
else
{
   write to product table productname=ColumnA, productprice=columnB, category=saveCategory;
}
loop back to read next row until end of worksheet;

答案 2 :(得分:0)

如果可用,我会使用SQL Server Integration Services。它可以处理源中的记录类型。