Excel数据导入实现列表清单式excel数据的导入与更新,支持的功能有:
需要了解的限制有:
需要了解的功能术语有:
创建/管理excel中每个sheet页的导入规则,用于多次导入规则相同的excel数据。
一个excel文件对应一个excel导入模板,excel文件中的sheet页对应模板中的一个导入规则。
可选值列表的定义,用于验证excel中某一列的数据必须在指定的可选值列表内,目前仅支持字符串类型。
查看导入异常日志,并可以导出导入异常的数据、及异常原因。
出现在异常数据日志中的前置条件:Excel导入模板中需要设置“异常处理规则”为 继续执行 。
1、在demo库中的northwind执行附件中的“测试表及数据.sql”,这个脚本导入两张表:xxxgxzdw(学校相关行政单位)和dim_xxmc(学校名称维表)。导入成功后进入smartbi,将新增的表加入到数据源管理中("管理""系统管理""数据源""northwind""DEFAULT"-"同步schema")。
2、演示要导入的excel数据“表1-3学校相关行政单位.xls”。
下面以新建一个“演示带参数的导入模板”为例,详细说明每一项的配置。该示例实现为每个学校导入、更新行政单位及其负责人。
Excel数据如下:
目标表结构如下:
其中学校代码,需要根据用户选择的值导入,实现如下:
1、点击新建Excel导入模板
2、进入Excel导入模板编辑界面
区域4为参数布局设置:可以对参数的位置进行调整。
3、进入规则编辑界面
主键冲突处理规则:设置主键冲突时(是指Excel中数据出现和数据库表中的数据主键值一样时),是执行更新还是抛出主键冲突的校验异常,这里的"主键"是"列设置"中用户指定的主键,并不一定是数据库表的主键,但设置的主键也是需要数据满足唯一性。
a. 更新:主键重复时,执行更新。
b. 异常处理:主键重复时,抛出主键冲突的检验异常,由“异常处理规则”去处理这个异常。
4、 保存模板
点击 保存 ,弹出“保存Excel导入模板”对话框,输入名称及描述,点击 确认 保存模板。
"批量导入"和"异常处理规则"两个按钮需要配合使用,配合实际例子对逻辑描述如下:
假如,现在有1086行数据需要导入,前1000条称为【批次1】,后续的86条称为【批次2】
1. 开启批量+异常做回滚处理:
· 如批次1里的数据出现异常,回滚批次1,并且后续批次不导入。
· 如批次2里的数据出现异常,回滚批次2,并且后续批次不导入,但批次1的数据已经被提交。
2. 开启批量+异常做继续执行处理:
共插入1085行,跳过错误的1行。
3. 关闭批量+异常做回滚处理:
全部回滚。
4. 关闭批量+异常做继续执行处理:
共插入1085行,跳过错误的1行。
下面以新建“单位职能列表”为例,详细说明每一项的配置。
1、点击新建值域范围,选择数据源northwind
2、进入值域范围范围编辑界面:
3、点击保存,保存值域范围。
查看导入异常日志,并可以导出导入异常的数据、及异常原因。
出现在异常数据日志中的前置条件:Excel导入模板中需要设置“异常处理规则”为 继续执行 。
请见“新建Excel导入模板”。
值域范围的新建和下拉框参数的新建非常相像,但比下拉框参数更简单。
请见“新建值域范围 ”。
该示例实现为每个学校导入、更新行政单位及其负责人。Excel数据如下:
目标表结构如下:
其中学校代码,需要根据用户选择的值导入,单位职能只有:学生管理、教学管理、质量监控、其他四个可选值。实现步骤如下:
1、新建“单位职能列表”值域范围,详见“演示静态列表值域范围”。
2、点击新建Excel导入模板。
3、点击列设置,设置列映射。
4、点击“单位职能”那一行的校验设置,设置值域范围校验,点击 确定。
5、点击保存,弹出保存对话框,输入名称“演示带值域范围验证的导入模板”,保存excel导入模板。
6、双击“演示带值域范围验证的导入模板”执行导入,选择文件“表1-3学校相关行政单位 - 值域范围验证.xls”验证值域范围校验。
7、下载异常数据
1)如果提示“下载异常数据失败”,原因:模板文件不存在,请编辑模板,上传模板文件。请重新编辑改Excel模板,上传模板文件。
2)然后点击右下角的保存,就会显示成:
3)上传模板后,关闭模板,点击“异常数据日志管理”,可以看到刚导入的异常数据。
4)点击“下载异常”图标,下载异常数据。
否则可以看到导出的异常数据,显示值域范围验证失败。
该示例实现为每个学校导入、更新行政单位及其负责人。Excel数据如下:
目标表结构如下:
其中学校代码,需要根据用户选择的值导入,唯一id需要根据学校代码和单位号组合而成,实现步骤如下:
1)新建扩展包“DataImporterDemo”,extension.xml中设置depends="DataImporter",独立开发扩展包时,为了正常编译,需要将DataImporter.jar放到扩展包的lib-compile目录(打包时不需要打包到扩展包)。
2)新建行政单位ID类“smartbi.demo.XZDWID”
package smartbi.demo;
import smartbi.daq.excelimport.ICellDataGenerator;
import smartbi.daq.excelimport.ImportFileConfig;
import smartbi.daq.excelimport.RowData;
import smartbi.net.sf.json.JSONObject;
import smartbi.util.StringUtil;
public class XZDWID implements ICellDataGenerator {
@Override
public String getCellValue(JSONObject colConfig, RowData rowData,
ImportFileConfig config) {
String xxdm = rowData.getCell("C_XXDM", true); //学校代码
String dwh = rowData.getCell("C_DWH"); //单位号
if(!StringUtil.isNullOrEmpty(xxdm) && !StringUtil.isNullOrEmpty(dwh)){
return xxdm + "_" + dwh;
}
return null;
}
}
2)新建Module类"smartbi.demo.DAQDemoModule",注册自定义JAVA类,名为"学校行政单位id"
package smartbi.demo;
import smartbi.daq.DataAcquisitionModule;
import smartbi.framework.IModule;
public class DAQDemoModule implements IModule{
/** */
private static DAQDemoModule instance = new DAQDemoModule();
/**
*
* @return DataAcquisitionModule
*/
public static DAQDemoModule getInstance() {
return instance;
}
@Override
public void activate() {
DataAcquisitionModule.getInstance().registerExcelCellDataGenerator("学校行政单位id","学校行政单位id" , new XZDWID());
}
}
4)加入DataImporterDemo扩展包,重新启动smartbi服务器。
5)点击新建Excel导入模板,添加导入规则。
6)点击列设置,设置列映射。其中的“唯一id”选择绑定JAVA类,并选择“学校行政单位id”。
点击保存,弹出保存对话框,输入名称“演示绑定自定义java类的导入模板”,保存excel导入模板。
7)双击该模板执行导入,选择“表1-3学校相关行政单位.xls”。
8)到数据库中看结果:
请见“Excel数据导入_类文档注释”。
附件:测试表及数据.sql
原始文档:http://pan.baidu.com/s/1miIn4SS