我有一个包含类别及其产品列表的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
我可以用什么工具/语言来做这件事并不重要。这是一次性提取。关于如何开始研究这个问题的任何指示都会非常有用。
答案 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。它可以处理源中的记录类型。