Нужна помощь в извлечении данных из файла Excel - PullRequest
0 голосов
/ 18 июня 2011

У меня есть файл excel со списком категорий и их продуктов, причем каждый продукт имеет ассоциированную цену. И это очень плохо организовано, это что-то вроде этого:

Автомобили

Subaru | $ 5200

Тойота | $ 4300

Lexus | $ 8600

Форд | $ 7580

Транспорт

Мерседес | $ 12200

Suzuki | $ 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 ]

2 голосов
/ 18 июня 2011

Для однократного извлечения используйте vba, чтобы разбить данные на две отдельные временные таблицы в Excel и стандартных методах для вставки данных в базу данных.

В приведенном ниже коде предполагается, что данные находятся на листе с именем «Данные».и начинается в ячейке A1
Добавьте два листа с именами "Catagory" и "Product" * Код 1004 *

циклически проходит по листу данных, копируя каждую строку на правильный лист таблицы

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
0 голосов
/ 18 июня 2011

Если доступно, я бы использовал SQL Server Integration Services.Может обрабатывать типы записей в источнике.

0 голосов
/ 18 июня 2011

РЕДАКТИРОВАНИЕ: на основе новых требований, описанных в комментариях ниже.

Используйте VBA внутри Excel для выполнения следующих действий.Я опишу, используя код 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;
...