2011-06-13 116 views
1

我有一個相對複雜的Excel工作表,其中列開始於A,結束於BB,行開始於5,結束於203.從Excel傳輸數據到MySQL服務器數據庫?

我想要做的是告訴MySQL,每列數據(帶有我沒有在工作表中指定的標題)應該從第5行開始,並在第203行結束,並確切地指定我想要傳輸的列。我該怎麼做?

感謝您的幫助!

編輯:203行下面有不相關的數據,我不希望被採取。還有空白欄,所以我需要避免這些。

回答

1

首先,將您的Excel工作表保存爲CSV。

下一步。創建黑洞表將數據讀入:

DROP TABLE IF EXISTS `test`.`import_excel`; 
CREATE TABLE `test`.`import_excel` (
    `A` int(10) unsigned NOT NULL, 
    `B` varchar(45) NOT NULL, 
    `C` varchar(45) NOT NULL, 
    `D` varchar(45) NOT NULL, 
    `E` varchar(45) NOT NULL, 
    ..... 
    `BB` varchar(45) NOT NULL 
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1; 

創建一個只有一行的簡單計數器表。

DROP TABLE IF EXISTS `test`.`counter`; 
CREATE TABLE `test`.`counter` (
    id int(10) unsigned NOT NULL PRIMARY KEY, 
    `count` int(10) unsigned NOT NULL, 
    `max_count` int(10) unsigned NOT NULL 
) ENGINE=MEMORY DEFAULT CHARSET=latin1; 

REPLACE INTO counter VALUES (1,0,(203-5)); 

在黑洞表創建觸發器

DELIMITER $$ 

CREATE TRIGGER ai_import_excel_each AFTER INSERT ON import_excel FOR EACH ROW 
BEGIN 
    DECLARE rows_left integer; 

    SELECT max_count - (`count` + 1) INTO rows_left FROM counter WHERE id = 1; 
    IF rows_left > 0 THEN BEGIN 
    //count the row_number you're in. 
    UPDATE counter SET `count` = `count` + 1 WHERE id = 1; 

    //Interpret the data and insert it into the proper tables. 
    //This is just an example 
    INSERT INTO real_table (a,b,c) VALUES (new.a, new.b, new.c); 
    INSERT INTO real_table2 (a,b,c) VALUES (NULLIF(new.d,''), new.e, new.c); 
    //You can change the data in anyway you like. 
    END; END IF; 
END $$ 

DELIMITER ; 

最後進口線5到203到import_excel表。

LOAD DATA INFILE 'c:/excel.csv' INTO TABLE import_excel 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' 
    IGNORE 4 LINES; 

的前4行將由LOAD DATA INFILE的最後一行將被觸發被剝離出來被忽略。

+0

哇。我會盡快嘗試。感謝徹底的迴應。 – Andrew 2011-06-14 03:16:23

相關問題