将数据从Excel传输到MySQL Server DB?

问题描述

| 我有一个相对复杂的Excel工作表,其中列从A开始,到BB结束,行从5开始,到203结束。 我想做的就是告诉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,(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,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行导入到“ 3”表中。
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行将被ѭ5忽略,最后几行将被触发器删除。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...