导入excel数据到数据库

1.上传excel到服务器

jsp页面代码

<form action="actionname" method="post" id="form1" enctype="multipart/form-data">

<input type="file" name="excel" id="fileExecl" class="inputFile" onchange="uploadFile(this)" size="1" title=""/>
<input type="button" value="导入excel" onclick="importExcel()">

<form>

js代码

function importExcel() {
var fileExecl = document.getElementById("fileExecl").value;
if(fileExecl==null||fileExecl==""){
alert("请选择excel文件");
return false;
}
document.getElementById("action").value="importExcel";
document.getElementById("form1").submit();

}

function uploadFile(importObj) {
var path = importObj.value;
var type = path.substring(path.lastIndexOf(".") + 1, path.length).toLowerCase();
if (type != "xlsx"&&type != "xls") {
alert("请上传xlsx或xls后缀的Excel");
importObj.value = "";
} else {
document.getElementById("action").value="importExcel";
}
}

  

action代码

private File excel;//上传的文件
private String excelFileName; // File属性名 + FileName固定的

private File uploadFile() {
		InputStream is = null;
		OutputStream os = null;
		try {
			is = new FileInputStream(excel);
			String uploadPath = this.getServletContext().getRealPath("/staticFiles");
			//分解路径
			//String filePath = getFileDirectory(uploadPath);
			File destFile = new File(uploadPath, excelFileName);
			os = new FileOutputStream(destFile);
			byte[] buffer = new byte[400];
			int length = 0;
			while ((length = is.read(buffer)) > 0) {
				os.write(buffer, 0, length);
			}
			is.close();
			os.close();
			return destFile;
		} catch (FileNotFoundException e) {
			logger.error(e, e);
		} catch (IOException e) {
			logger.error(e, e);
		}
		return null;
	}

public String importExcel() {

		//文件上传路径
		File file = uploadFile();
		String filePath = file.getPath();
		//获取导出数据
		ImportExcel importExcel = new ImportExcel();
		List<String[]> importList = importExcel.getImportList(filePath);
		//删除上传文件
		if(file.isFile() && file.exists()) {
			file.delete();
		}
		for (int i = 1; i < importList.size(); i++) {
			String[] rowData = importList.get(i);
    //rowData[0] excel中第一列数据
                }

		return null;
	}

解析excel代码  xls和xlsx两种格式,代码可以优化

public class ImportExcel {
	/**
	 *
	 * @param filePath 文件路径
	 * @return excel中一行数据储存在一个数组String[]
	 */
	public List<String[]> getImportList(String filePath) {
		List<String[]> rowsData = new ArrayList<String[]>();;
		if(filePath.endsWith("xls")){
			try {
				boolean importData = false;
				HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(filePath));
				HSSFSheet sheet = hwb.getSheetAt(0);
				int rows = sheet.getPhysicalNumberOfRows();// 获取表格的行数
				for (int r = 0; r < rows; r++) { // 循环遍历表格的行
					importData = false;
					String cellValue = "";
					HSSFRow row = sheet.getRow(r);
					if (row != null) {
						int cells =row.getLastCellNum();
						String[] rowData = new String[cells];
						for (int c = row.getFirstCellNum(); c < cells; c++) {
							HSSFCell cell = row.getCell(c);
							if (cell != null) {
								if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { // 判断单元格的值是否为字符串类型
									cellValue = cell.getStringCellValue();
								} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { // 判断单元格的值是否为数字类型
									cellValue = cell.getNumericCellValue() + "";
								} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { // 判断单元格的值是否为布尔类型
									cellValue = cell.getStringCellValue();
								} else {
									cellValue = "";
								}
							}
							if (cellValue.trim().length() > 0) {
								importData = true;
							}
							rowData[c] = cellValue;
						}
						//数据全为空,不导入
						if (r > 0 && !importData) {
							continue;
						}
						rowsData.add(rowData);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else if(filePath.endsWith("xlsx")){
			try {
			boolean importData = false;
			XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(
					filePath)); // 创建对Excel工作簿文件的引用
			XSSFSheet sheet = workbook.getSheetAt(0); // 创建对第一个工作表的引用,多个工作表暂未实现
			int rows = sheet.getPhysicalNumberOfRows();// 获取表格的行数
			for (int r = 0; r < rows; r++) { // 循环遍历表格的行
				importData = false;
				String cellValue = "";
				XSSFRow row = sheet.getRow(r); // 获取单元格中指定的行对象
				if (row != null) {
					int cells = row.getPhysicalNumberOfCells();// 获取单元格中指定列对象
					String[] rowData = new String[cells];
					for (short c = 0; c < cells; c++) { // 循环遍历单元格中的列
						XSSFCell cell = row.getCell((short) c); // 获取指定单元格中的列
						if (cell != null) {
							if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { // 判断单元格的值是否为字符串类型
								cellValue = cell.getStringCellValue();
							} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { // 判断单元格的值是否为数字类型
								cellValue = cell.getNumericCellValue() + "";
							} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { // 判断单元格的值是否为布尔类型
								cellValue = cell.getStringCellValue();
							} else {
								cellValue = "";
							}
						}
						if (cellValue.trim().length() > 0) {
							importData = true;
						}
						rowData[c] = cellValue;
					}
					//数据全为空,不导入
					if (r > 0 && !importData) {
						continue;
					}
					rowsData.add(rowData);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		}
		return rowsData;
	}

}

  

 

时间: 2024-10-11 17:03:10

导入excel数据到数据库的相关文章

导入Excel数据至数据库——思路整理

说明 背景: 导入Excel数据到数据库成为目前项目中很常用的技术,整理以前的实现发现:在原来系统中的导入,没有实现方法复用,如果要实现某一处数据的导入,需要将原来的代码复制过去.修修改改,实现过程较为复杂,实现类似的功能需要对原来的代码重新梳理,结合业务修改代码. 为了让每次相同的功能都不需要重复的开发,我们需要实现一种能够得到复用的程序功能. 目的: 如图所示 我们需要将Excel中的数据记录插入到DB的表中,如何实现? 转换 将Excel转换为List 将Excel转换为DataTable

如何批量导入excel数据至数据库(MySql)--工具phpMyAdmin

之前由于数据储存使用excel保存了所有数据,经过初步数据筛选,数据量近4000条.一条一条录入数据库显然是不可行的.以下是我所操作的步骤: 1.只保留excel的数据部分,去除第一行的具体说明 2.文件另存为(.csv)格式 保存即可 3.把刚才存成csv格式的文件用TXT打开再次另存为 注意! 编码改成 UTF-8 这步必须要有,否则导入后极有可能出现乱码. 4.在phpmyadmin中按照数据顺序创建表,新建字段,字段名与你要导入的excel表字段关联且顺序相同. 5.点击"导入"

Winform导入Excel数据到数据库

public partial class ImportExcel : Form { AceessHelpers accessHelper = new AceessHelpers(); public ImportExcel() { InitializeComponent(); } private void btn_importExcelData(object sender, EventArgs e) { openFileDialog1.Title = "打开文件"; openFileDi

windows命令行下导入excel数据到SQLite数据库

1.转换文件格式,防止中文乱码:将excel保存成"CSV(逗号分隔)(*.csv)"格式,关闭文件,用记事本打开刚才保存的.csv文件,然后另存为UTF-8格式文本.需要注意的是,经过这样的转换,数字也全变成文本了. 2.通过adb shell(adb.exe存放在android开发软件安装文件夹中,如 F:\Develope\Tools\adt-bundle-windows-x86\sdk\platform-tools\)更改sqlite数据库的使用权限.运行adb之前要先打开AV

SQL Server服务器上需要导入Excel数据的必要条件

SQL Server服务器上需要导入Excel数据,必须安装2007 Office system 驱动程序:数据连接组件,或者Access2010的数据库引擎可再发行程序包,这样就不必在服务器上装Excel了.

上传excel数据到数据库中

上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../upload/disposeFlightData" method="post"> <input id="disposeFlightDataButton" type="submit" value="处理航班数据"

asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册&quot;Microsoft.Jet.OLEDB.4.0&quot; 提供程序&quot;

asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0" 提供程序" 笔者在项目中做做了一个从Excel表格中导入数据的模块.大体上asp.net项目中导入Excel大体分成三类: 1)采用c#内置方案System.Data.OleDb(限制较小, 通用) 2)采用Excel的COM组件(会有版本问题) 3)采用伪Excel文件.即使用文本流的方式根据需求自己定义数据格式.同时在服务端进行反格式化 笔者采

(转)PLSQL Developer导入Excel数据

场景:近来在做加班记录的统计,主要是统计Excel表格中的时间,因为我对于Excel表格的操作不是很熟悉,所以就想到把表格中的数据导入到数据库中,通过脚本语言来统计,就很方便了!但是目前来看,我还没有完成最终统计的目的,只是将Excel中的数据导入到了数据库中了,所以未完待续! 最近处理将Excel数据导入Oracle的工作比较多.之前都是采用Sqlldr命令行导入的方式处理.每次导入不同格式的Excel表数据,都需要先把Excel文件由“.xls”格式转换为“.csv”格式,再手工根据Exce

结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括有上传文件,预览数据,选择并提交记录等一系列操作. 关于这个插件,我在早期随笔<Bootstrap文件上传插件File Input的使用>也做了一次介绍,这是一个增强的 HTML5 文件输入控件,是一个 Bootstrap 3.x