从Excel传输数据到MySQL服务器数据库?
问题描述:
我有一个相对复杂的Excel工作表,其中列开始于A,结束于BB,行开始于5,结束于203.从Excel传输数据到MySQL服务器数据库?
我想要做的是告诉MySQL,每列数据(带有我没有在工作表中指定的标题)应该从第5行开始,并在第203行结束,并确切地指定我想要传输的列。我该怎么做?
感谢您的帮助!
编辑:203行下面有不相关的数据,我不希望被采取。还有空白栏,所以我需要避免这些。
答
首先,将您的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
的最后一行将被触发被剥离出来被忽略。
哇。我会尽快尝试。感谢彻底的回应。 – Andrew 2011-06-14 03:16:23