Maison  >  Article  >  Java  >  Comment implémenter une base de données d'importation et d'exportation Excel en Java

Comment implémenter une base de données d'importation et d'exportation Excel en Java

黄舟
黄舟original
2017-08-20 09:41:171949parcourir

Cet article présente principalement la méthode Java pour implémenter la base de données d'importation et d'exportation Excel, et analyse les compétences d'implémentation de Java liées aux opérations de lecture, d'écriture et de base de données pour Excel sous forme d'exemples. Les amis dans le besoin peuvent se référer aux exemples de ceci. article

Décrit comment implémenter la base de données d'importation et d'exportation Excel en Java. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

En raison des besoins de l'entreprise, je souhaite importer des données via Excel et les ajouter à la base de données. Cependant, les champs de l'Excel importé ne le sont pas. corrigé. Vous devez créer dynamiquement une table de données à chaque fois. Chaque Excel correspond à une table de données. Comment créer dynamiquement une table de données, vous pouvez vous référer à l'article précédent "Java utilise JDBC pour créer dynamiquement des tables de données et des méthodes de prétraitement SQL. "

Ce qui suit explique principalement comment importer Excel dans la base de données et saisir directement le code : Commencer~~

Classe ExcellToObjectUtil

Le principal La fonction est Lorsqu'il s'agit d'importer des données d'Excel dans une base de données, il y a quelques points à noter :

1 Généralement, la première ligne dans Excel est le nom du champ et n'a pas besoin d'être importée, donc. le calcul commence à partir de la deuxième ligne

2 La correspondance de chaque colonne doit être la même que les attributs de l'objet


import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import com.forenms.exam.domain.ExamInfo;
public class ExcellToObjectUtil {
  //examId,realName,身份证,user_card,sex,没有字段,assessment_project,admission_number,seat_number
   /**
   * 读取xls文件内容
   * 
   * @return List<XlsDto>对象
   * @throws IOException
   *       输入/输出(i/o)异常
   */
  public static List<ExamInfo> readXls(POIFSFileSystem poifsFileSystem) throws IOException {
//    InputStream is = new FileInputStream(filepath);
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(poifsFileSystem);
    ExamInfo exam = null;
    List<ExamInfo> list = new ArrayList<ExamInfo>();
    // 循环工作表Sheet
    for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
      HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
      if (hssfSheet == null) {
        continue;
      }
      // 循环行Row
      for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
        HSSFRow hssfRow = hssfSheet.getRow(rowNum);
        if (hssfRow == null) {
          continue;
        }
        exam = new ExamInfo();
        // 循环列Cell
        HSSFCell examId = hssfRow.getCell(1);
        if (examId == null) {
          continue;
        }
        double id = Double.parseDouble(getValue(examId));
        exam.setExamId((int)id);
//        HSSFCell realName = hssfRow.getCell(2);
//        if (realName == null) {
//          continue;
//        }
//        exam.setRealName(getValue(realName));
//        HSSFCell userCard = hssfRow.getCell(4);
//        if (userCard == null) {
//          continue;
//        }
//        
//        exam.setUserCard(getValue(userCard));
        HSSFCell admission_number = hssfRow.getCell(8);
        if (admission_number == null) {
          continue;
        }
        exam.setAdmission_number(getValue(admission_number));
        HSSFCell seat_number = hssfRow.getCell(9);
        if (seat_number == null) {
          continue;
        }
        exam.setSeat_number(getValue(seat_number));
        list.add(exam);
      }
    }
    return list;
  }
  public static List<ExamInfo> readXlsForJS(POIFSFileSystem poifsFileSystem) throws IOException {
//   InputStream is = new FileInputStream(filepath);
   HSSFWorkbook hssfWorkbook = new HSSFWorkbook(poifsFileSystem);
   ExamInfo exam = null;
   List<ExamInfo> list = new ArrayList<ExamInfo>();
   // 循环工作表Sheet
   for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
     HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
     if (hssfSheet == null) {
       continue;
     }
     // 循环行Row
     for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
       HSSFRow hssfRow = hssfSheet.getRow(rowNum);
       if (hssfRow == null) {
         continue;
       }
       exam = new ExamInfo();
       // 循环列Cell 准考证号
       HSSFCell admission_number = hssfRow.getCell(0);
       if (admission_number == null) {
         continue;
       }
       exam.setAdmission_number(getValue(admission_number));
       //读取身份证号
       HSSFCell userCard= hssfRow.getCell(2);
       if (userCard == null) {
        continue;
       }
       exam.setUserCard(getValue(userCard));
       //读取座位号
       HSSFCell seat_number = hssfRow.getCell(3);
       if (seat_number == null) {
        continue;
       }
       exam.setSeat_number(getValue(seat_number));
       //读取考场号
       HSSFCell fRoomName = hssfRow.getCell(6);
       if (fRoomName == null) {
        continue;
       }
       exam.setfRoomName(getValue(fRoomName));
       //读取开考时间
       HSSFCell fBeginTime = hssfRow.getCell(8);
       if (fBeginTime == null) {
        continue;
       }
       exam.setfBeginTime(getValue(fBeginTime));
       //读取结束时间
       HSSFCell fEndTime = hssfRow.getCell(9);
       if (fEndTime == null) {
        continue;
       }
       exam.setfEndTime(getValue(fEndTime));
       list.add(exam);
     }
   }
   return list;
 }
  /**
   * 得到Excel表中的值
   * 
   * @param hssfCell
   *      Excel中的每一个格子
   * @return Excel中每一个格子中的值
   */
  private static String getValue(HSSFCell hssfCell) {
    if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
      // 返回布尔类型的值
      return String.valueOf(hssfCell.getBooleanCellValue());
    } else if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
      // 返回数值类型的值
      DecimalFormat df = new DecimalFormat("0"); 
      String strCell = df.format(hssfCell.getNumericCellValue());
      return String.valueOf(strCell);
    } else {
      // 返回字符串类型的值
      return String.valueOf(hssfCell.getStringCellValue());
    }
  }
}

Bien sûr. il y a une fonction d'importation, et il doit aussi y avoir une fonction d'exportation. La fonction d'exportation est introduite ci-dessous, directement dans le code :


import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.forenms.exam.domain.ExamInfo;
public class ObjectToExcellUtil {
  //导出的文件名称
  public static String FILE_NAME = "examInfo";
  public static String[] CELLS = {"序号","编号","真实姓名","证件类型","证件号","性别","出生年月","科目","准考证号","座位号","考场号","开考时间","结束时间"};
  //examId,realName,身份证,user_card,sex,没有字段,assessment_project,admission_number,seat_number
  public static void examInfoToExcel(List<ExamInfo> xls,int CountColumnNum,String filename,String[] names,HttpServletResponse response) throws Exception {
      // 获取总列数
//     int CountColumnNum = CountColumnNum;
      // 创建Excel文档
      HSSFWorkbook hwb = new HSSFWorkbook();
      ExamInfo xlsDto = null;
      // sheet 对应一个工作页
      HSSFSheet sheet = hwb.createSheet(filename);
//     sheet.setColumnHidden(1,true);//隐藏列
      HSSFRow firstrow = sheet.createRow(0); // 下标为0的行开始
      HSSFCell[] firstcell = new HSSFCell[names.length];
      for (int j = 0; j < names.length; j++) {
         sheet.setColumnWidth(j, 5000);
        firstcell[j] = firstrow.createCell(j);
        firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
      }
      for (int i = 0; i < CountColumnNum; i++) {
        // 创建一行
        HSSFRow row = sheet.createRow(i + 1);
        // 得到要插入的每一条记录
        xlsDto = xls.get(i);
        for (int colu = 0; colu <= 12; colu++) {
          // 在一行内循环
          HSSFCell xh = row.createCell(0);
          xh.setCellValue(i+1);
          HSSFCell examid = row.createCell(1);
          examid.setCellValue(xlsDto.getExamId());
          HSSFCell realName = row.createCell(2);
          realName.setCellValue(xlsDto.getRealName());
          HSSFCell zjlx = row.createCell(3);
          zjlx.setCellValue("身份证");
          HSSFCell userCard = row.createCell(4);
          userCard.setCellValue(xlsDto.getUserCard());
          HSSFCell sex = row.createCell(5);
          sex.setCellValue(xlsDto.getSex());
          HSSFCell born = row.createCell(6);
          String bornTime = xlsDto.getUserCard().substring(6, 14);
          born.setCellValue(bornTime);
          HSSFCell assessment_project = row.createCell(7);
          assessment_project.setCellValue(xlsDto.getAssessmentProject());
          HSSFCell admission_number = row.createCell(8);
          admission_number.setCellValue(xlsDto.getAdmission_number());
          HSSFCell seat_number = row.createCell(9);
          seat_number.setCellValue(xlsDto.getSeat_number());
          HSSFCell fRoomName = row.createCell(10);
          fRoomName.setCellValue(xlsDto.getfRoomName());
          HSSFCell fBeginTime = row.createCell(11);
          fBeginTime.setCellValue(xlsDto.getfBeginTime());
          HSSFCell fEndTime = row.createCell(12);
          fEndTime.setCellValue(xlsDto.getfEndTime());
        }
      }
      // 创建文件输出流,准备输出电子表格
      response.reset();
      response.setContentType("application/vnd.ms-excel;charset=GBK");
      response.addHeader("Content-Disposition", "attachment;filename="+filename+".xls");
      OutputStream os = response.getOutputStream(); 
      hwb.write(os);
      os.close();
    }
}

La fonction d'exportation est très. simple. Encapsulez simplement l'objet et appelez la méthode directement. Parlons maintenant de la façon d'appeler la page d'accueil lors de l'importation,


<form method="post" action="adminLogin/auditResults/import" enctype="multipart/form-data" onsubmit="return importData();"> 
<input id="filepath" name="insuranceExcelFile" type="file" size="30" value=""  style="font-size:14px" />
<button type="submit" style="height:25px" value="导入数据">导入数据</button>

Lors de la soumission du front-end importé. form, assurez-vous de définir enctype="multipart/form-data", sinon il n'y a aucune difficulté.
Contrôleur accepté par l'arrière-plan :


/**
* 读取用户提供的examinfo.xls
* @param request
* @param response
* @param session
* @return
* @throws Exception
*/
@RequestMapping(value="adminLogin/auditResults/import",method=RequestMethod.POST)
public ModelAndView importExamInfoExcell(HttpServletRequest request,HttpServletResponse response, HttpSession session)throws Exception{
    //获取请求封装
    MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
    Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
    //读取需要填写准考证号的人员名单
    ExamInfo examInfo = new ExamInfo();
    List<ExamInfo> info = examInfoService.queryExamInfoForDownLoad(examInfo);
    //获取请求封装对象
    for(Entry<String, MultipartFile> entry: fileMap.entrySet()){
      MultipartFile multipartFile = entry.getValue();
      InputStream inputStream = multipartFile.getInputStream();
      POIFSFileSystem poifsFileSystem = new POIFSFileSystem(inputStream);
      //从xml读取需要的数据
      List<ExamInfo> list = ExcellToObjectUtil.readXlsForJS(poifsFileSystem);
      for (ExamInfo ei : list) {
         //通过匹配身份证号 填写对应的数据
        for (ExamInfo in : info){
          //如果身份证号 相同 则录入数据
if(in.getUserCard().trim().toUpperCase().equals(ei.getUserCard().trim().toUpperCase())){
            ei.setExamId(in.getExamId());
            examInfoService.updateExamInfoById(ei);
            break;
          }
        }
      }
    }
    ModelAndView mav=new ModelAndView(PATH+"importExcelTip");
    request.setAttribute("data", "ok");
    return mav;
}

D'accord, les fonctions d'importation et d'exportation Excel sont toutes terminées. C'est simple. Vous devez modifier le. emballez-vous. Format d'objet et configurez chaque colonne d'Excel pour qu'elle soit utilisée vous-même ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn