zoukankan      html  css  js  c++  java
  • excel导入数据到mysql数据库

    比如需要把exel数据导入数据库,有很多种方法,比如如果能登录mysql服务器,可以使用load data,也可以借助比如etl工具kettle,也可以专门处理csv工具的python脚本等方法。

    我常用的是我认为是比较高效的一种,直接写excel公式。

    比如我需要向表 inventory_alert 插入数据,表结构如下:

    CREATE TABLE inventory_alert (
      ID int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      INVENTORY_CODE varchar(40) COLLATE utf8mb4_0900_as_cs NOT NULL COMMENT '存货编码',
      INVENTORY_NAME varchar(64) COLLATE utf8mb4_0900_as_cs NOT NULL COMMENT '存货名称',
      MAT_AVG decimal(10,0) DEFAULT NULL COMMENT '月均发货',
      MAT_MSD decimal(10,0) DEFAULT NULL COMMENT '月标准差',
      MAT_WSD decimal(10,0) DEFAULT NULL COMMENT '周标准差',
      TSM_AMOUNT decimal(10,0) DEFAULT NULL COMMENT '发货金额合计(万元)(MAT-12个月)',
      TSM_PENCT decimal(10,0) DEFAULT NULL COMMENT '发货金额占比',
      TSM_APENCT decimal(10,0) DEFAULT NULL COMMENT '发货金额累计占比',
      VAR_COA decimal(10,0) DEFAULT NULL COMMENT '变异系数',
      THE_COA varchar(64) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '理论象限',
      QA_SET varchar(64) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '象限设置',
      WSLT decimal(10,0) DEFAULT NULL COMMENT '发运提前期(周)',
      CSLF decimal(10,0) DEFAULT NULL COMMENT '客户服务水平系数',
      REMARK varchar(400) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '备注',
      SEC_INVENTORY decimal(10,0) DEFAULT NULL COMMENT '安全库存数量',
      AVA_INVENTORY decimal(10,0) DEFAULT NULL COMMENT '可用库存数量',
      SEC_AVA_INVENTORY decimal(10,0) DEFAULT NULL COMMENT '可用库存/安全库存',
      FA_REQ1 decimal(10,0) DEFAULT NULL COMMENT '未来需求1',
      FA_REQ2 decimal(10,0) DEFAULT NULL COMMENT '未来需求2',
      FA_REQ3 decimal(10,0) DEFAULT NULL COMMENT '未来需求3',
      MON_AVG decimal(10,0) DEFAULT NULL COMMENT '月均',
      SALES_SCORE decimal(10,0) DEFAULT NULL COMMENT '纯销指标合计',
      LTPA decimal(10,0) DEFAULT NULL COMMENT '库销比',
      RISK varchar(40) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '风险提示',
      PRIMARY KEY (INVENTORY_CODE,INVENTORY_NAME),
      KEY ID (ID)
    ) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_as_cs

    先把excel第一行字段与列明对其,我的比如有20+个字段,最开始公式拼接为:

    ="insert into inventory_alert(INVENTORY_CODE,INVENTORY_NAME,MAT_AVG,MAT_MSD,MAT_WSD,TSM_AMOUNT,TSM_PENCT,TSM_APENCT,VAR_COA,THE_COA,QA_SET,WSLT,CSLF,REMARK,SEC_INVENTORY,
    AVA_INVENTORY,SEC_AVA_INVENTORY,F_REQ1,F_REQ2,F_REQ3,MON_AVG,SALES_SCORE,LTPA,RISK)values('"&A2&"','"&B2&"','"&C2&"','"&D2&"','"&E2&"','"&F2&"','"&G2&"','"&H2&"','"&I2&"','"&J2&"',
    '"&K2&"','"&L2&"','"&M2&"','"&N2&"','"&O2&"','"&P2&"','"&Q2&"','"&R2&"','"&S2&"','"&T2&"','"&U2&"','"&V2&"','"&W2&"','"&X2&"');"

    excel提示:

    然后使用这个函数,找了一些用法,修改后:

    =CONCATENATE("insert into inventory_alert(INVENTORY_CODE,INVENTORY_NAME,MAT_AVG,MAT_MSD,MAT_WSD,TSM_AMOUNT,TSM_PENCT,TSM_APENCT,VAR_COA,THE_COA,QA_SET,WSLT,CSLF,REMARK,SEC_INVENTORY,
    AVA_INVENTORY,SEC_AVA_INVENTORY,F_REQ1,F_REQ2,F_REQ3,MON_AVG,SALES_SCORE,LTPA,RISK)values('"&A2&"','"&B2&"','"&C2&"','"&D2&"','"&E2&"','"&F2&"','"&G2&"','"&H2&"','"&I2&"','"&J2&"',
    '"&K2&"','"&L2&"','"&M2&"','"&N2&"','"&O2&"','"&P2&"','"&Q2&"','"&R2&"','"&S2&"','"&T2&"','"&U2&"','"&V2&"','"&W2&"','"&X2&"');")

    任然提示超出255个字符,想了一下,是excel这个格子里面我的这串字符串太多了,然后拆成2段拼接起来就好。

    ="insert into inventory_alert(INVENTORY_CODE,INVENTORY_NAME,MAT_AVG,MAT_MSD,MAT_WSD,TSM_AMOUNT,TSM_PENCT,TSM_APENCT,VAR_COA,THE_COA,QA_SET,WSLT,CSLF,REMARK,SEC_INVENTORY,
    AVA_INVENTORY,SEC_AVA_INVENTORY,F_REQ1,F_REQ2,F_REQ3,MON_AVG,SALES_SCORE,LTPA,RISK)"
    
    ="values('"&A2&"','"&B2&"','"&C2&"','"&D2&"','"&E2&"','"&F2&"','"&G2&"','"&H2&"','"&I2&"','"&J2&"',
    '"&K2&"','"&L2&"','"&M2&"','"&N2&"','"&O2&"','"&P2&"','"&Q2&"','"&R2&"','"&S2&"','"&T2&"','"&U2&"','"&V2&"','"&W2&"','"&X2&"');"

    最后再在后面一列,把这2列拼起来,比如我的这2列是Y与Z:

    =""&Y2&"&"&Z2&""

    然后在把拼接后的insert语句复制到gui执行就可以了。

    select concat('update alertdb.inventory_alert ma set ma.',column_name,'= null where ma.',column_name,'=',''''';') from information_schema.COLUMNS where table_name='inventory_alert'

    这个是把excel里面的空字符串update为null,要不然看起来不好看。

  • 相关阅读:
    VS中注释的使用
    VS2010中:error C2471: 无法更新程序数据库
    VS2010 MFC中在对话框上添加工具栏以及工具栏提示信息并改变图标支持256色
    CToolBar与CToolBarCtrl以及CStatusBar 与CStatusBarCtrl的区别
    error C2664: “wcscpy”: 不能将参数 1 从“LPSTR”转换为“wchar_t *”
    VS2010 MFC中的Picture控件显示图像
    VS2010 MFC中屏蔽ESC和ENTER键关闭对话框的方法
    MFC中CImageList(图形列表控件)、CTreeCtrl(树形列表控件)的简单用法
    窗口类、窗口类对象与窗口 三者之间关系——孙鑫<VC++深入详解>
    VS2010 MFC中改变static字体颜色、大小、背景颜色(自定义类),及手动关联变量的方法
  • 原文地址:https://www.cnblogs.com/5sdba-notes/p/12884731.html
Copyright © 2011-2022 走看看