spring mvcはexcelからデータを導入します.
問題のように、excelからデータベースにデータを導入して、サポートします.xlsと.xlsxの拡張子です.poiを使っています多くは言いません.具体的なコードは以下の通りです.
/** * excel * @param tableId id * @return , * @author zhengjiang * @Time 2016 3 8 */
@RequestMapping("/uploadExcel/{tableId}")
@ResponseBody
public Object uploadExcel(@PathVariable String tableId){
try{
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if(multipartResolver.isMultipart(request))
{
MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext())
{
int pre = (int) System.currentTimeMillis();
//
MultipartFile file = multiRequest.getFile(iter.next());
if (file != null) {
return this.readExcel(file.getInputStream(), tableId);
}
else
{
return new Object(){public boolean success = false;public String url = "";public String msg = " "; };
}
}
}
return new Object(){public boolean success = false;public String url = "";public String msg = " "; };
}
catch (Exception e) {
return e;
}
}
/** * excel * @param tableId id * @return , * @author zhengjiang * @Time 2016 3 15 */
private Object readExcel(InputStream is,String tableId){
try{
String tableName = this.getTableNameByTable(tableId);
HashMap map = this.getTableFieldsByTableId(tableId);
Workbook wb = this.create(is);
Sheet sheet = wb.getSheetAt(0);
//
if(tableName == null || tableName == "")
{
return new Object(){public boolean success = false;public String msg = " id "; };
}
// xy
if(!map.containsKey("x") || !map.containsKey("y"))
{
return new Object(){public boolean success = false;public String msg = " 。 X、Y , X、Y "; };
}
Iterator<Row> rows = sheet.rowIterator(); //
Row row0 = sheet.getRow(0);
while (rows.hasNext()) {
//
// 0
Row row = rows.next();
int rowNum = row.getRowNum();
if(rowNum == 0) continue;
//
Iterator<Cell> cells = row.cellIterator();
String str = "";
while (cells.hasNext()) {
Cell cell = cells.next();
int colNum = cell.getColumnIndex();
Object object = "";
// cell
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
// ,
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date d = cell.getDateCellValue();
long dd = d.getTime();
object = map.get(row0.getCell(colNum).getStringCellValue()) + ":{$date:" + dd + "}" ;
}else {
object = map.get(row0.getCell(colNum).getStringCellValue()) + ":" + cell.getNumericCellValue();
}
break;
case HSSFCell.CELL_TYPE_STRING:
object = map.get(row0.getCell(colNum).getStringCellValue()) + ":\"" + cell.getStringCellValue()+"\"";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
object = map.get(row0.getCell(colNum).getStringCellValue()) + ":" + cell.getBooleanCellValue();
break;
case HSSFCell.CELL_TYPE_FORMULA:
object = map.get(row0.getCell(colNum).getStringCellValue()) + ":" + cell.getCellFormula();
break;
default:
System.out.println("unsuported sell type");
break;
}
if(str == ""){
str = object.toString();
}else {
str += "," + object;
}
}
//
data d = new data();
str = "{" + str + "}";
HttpSession session = request.getSession();
if(session.getAttribute("loginUserName") == null) return null;
String loginUserName = session.getAttribute("loginUserName") + "";
d.Insert(tableName,str,loginUserName);
}
return new Object(){public boolean success = true;public String msg = " "; };
}
catch (Exception ex){
return new Object(){public boolean success = false;public String msg = ex.getMessage(); };
}
}
/** * id * @param tableId id * @return * @author zhengjiang * @Time 2016 3 15 */
private String getTableNameByTable(String tableId) {
data d = new data();
String sqlStr = "{\"_id\":{\"$oid\":\"" + tableId + "\"}}";
return d.getTableColumnByTableId("collectionList",sqlStr,"name").toString();
}
/** * Workbook * @param inp * @return Workbook * @author zhengjiang * @Time 2016 3 15 */
private static Workbook create(InputStream inp) throws IOException,InvalidFormatException {
if (!inp.markSupported()) {
inp = new PushbackInputStream(inp, 8);
}
//.xls
if (POIFSFileSystem.hasPOIFSHeader(inp)) {
return new HSSFWorkbook(inp);
}
//.xlsx
if (POIXMLDocument.hasOOXMLHeader(inp)) {
return new XSSFWorkbook(OPCPackage.open(inp));
}
throw new IllegalArgumentException(" excel poi ");
}
/** * key, value * @param tableId id * @return * @author zhengjiang * @Time 2016 3 21 */
private HashMap getTableFieldsByTableId(String tableId)
{
HashMap map = new HashMap();
map.put("x","x");
map.put("y","y");
data d = new data();
String sqlStr = "{\"_id\":{\"$oid\":\"" + tableId + "\"}}";
// data getTableColumnByTableId , , Document
Document doc = (Document)d.getTableColumnByTableId("collectionList",sqlStr,"fieldInfo");
// Document , ArrayList<Document>
ArrayList<Document> docs = new ArrayList<Document>(doc.get("fields",List.class));
for (Document document:docs) {
map.put(document.get("alias"),document.get("name"));
}
return map;
}