Ⅰ java用poi实现将数据库里面的数据导入已经存在的excel模板中。最好有实例参考,谢谢。
/**
*通过EXCEL模板导入团队信息
*/
@ResponseBody
@RequestMapping("importTemp")
publicMap<String,String>importTemp(HttpServletRequestrequest,HttpSessionsession,
@RequestParam(value="excel",required=false)MultipartFilefile,HttpServletResponseresponse){
Yhbyhb=(Yhb)session.getAttribute(WebConstants.CURRENT_USER);
Stringzjr=yhb.getYhid();
List<DrTdb>tdxxList=newArrayList<DrTdb>();
Map<String,String>map=newHashMap<String,String>();
Stringsfcg="1";
Stringbcghs="";
Stringbcgyy="";
HSSFWorkbookworkbook=null;
try{
workbook=newHSSFWorkbook(file.getInputStream());
HSSFSheetsheet=workbook.getSheetAt(0);
if(sheet!=null)
{
intd=sheet.getPhysicalNumberOfRows();
other:for(inti=7;i<sheet.getPhysicalNumberOfRows();i++)
{
sfcg="2";
HSSFRowrow=sheet.getRow(i);
DrTdbtd=newDrTdb();
intrs=1;
//td.setTdbm("T"+DateUtil.CurrentTime("MM-dd"));
td.setZjr(zjr);
for(intj=0;j<8;j++)
{
HSSFCellcell=row.getCell(j);
if(j==0){
if(cell!=null){
搜喊姿StringcellStr=cell.toString();
if(isDigit(cellStr)!=""){
StringNDID=(String)tdglService.queryForObject("tdExcel.queryNd",isDigit(cellStr));
td.setNd(NDID);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="请填写正确的年度";
breakother;
}
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="年度不可为空";
breakother;
}
}elseif(j==1){
if(cell!=null){
StringcellStr=cell.toString();
StringYXID=(String)tdglService.queryForObject("tdExcel.queryIdByYx",cellStr);
StringYXDM=(String)tdglService.queryForObject("tdExcel.queryDmByYx",cellStr);
if(YXDM==null||YXDM==""){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="院系不存在";
breakother;
}
td.setSsyx(YXID);
//设置团队编码
StringcurrentYear=DateUtil.CurrentTime("yyyy");//当前年份
Stringtdbm="";
Stringstr=null;
str="T"+currentYear+YXDM;
StringmaxID=(String)tdglService.queryForObject("tdgl.queryMaxID",str);//当前团队最大ID
Stringstr_q=maxID.substring(1);
intMAXID=Integer.parseInt(str_q);//将返回的字符串去掉T
tdbm="T"+(MAXID+1);
世绝渗唯td.setTdbm(tdbm);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="院系不存在";
breakother;
}
}elseif(j==3){
if(cell!=null){
StringcellStr=cell.toString();
String[]zdjs=cellStr.split(",");
for(intin=0;in<zdjs.length;in++){
zdjs[in]=zdjs[in].substring(1,zdjs[in].length()-1);
//zdjs[in]=isDigit(zdjs[in]);
zdjs[in]=(String)tdglService.queryForObject("tdExcel.queryIdByZgh",zdjs[in]);
if("".equals(zdjs[in])||zdjs[in]==null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="教师编号有误";
breakother;
}
}
td.setZdjs(zdjs);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="指导教师不可为空";
breakother;
}
}elseif(j==5){
if(cell!=null){
StringcellStr=cell.toString();
cellStr=cellStr.substring(1,cellStr.length()-1);
//BigDecimalbg=newBigDecimal(cellStr);
//cellStr=bg.toPlainString();
cellStr=(String)tdglService.queryForObject("tdExcel.queryIdByXh",cellStr);
if("".equals(cellStr)||cellStr==null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组长学号有误";
breakother;
}
else{
StringTdid=(String)tdglService.queryForObject("tdExcel.queryryid",cellStr);
StringXM=(String)tdglService.queryForObject("tdExcel.queryXmBy",cellStr);
if(Tdid!=null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组长"+XM+"已存在";
breakother;
}
}
td.setTdzz(cellStr);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组长不可为空";
breakother;
}
}elseif(j==7){
if(cell!=null){
StringcellStr=cell.toString();
String[]tdzy=cellStr.split(",");
for(intk=0;k<tdzy.length;k++){
tdzy[k]=tdzy[k].substring(1,tdzy[k].length()-1);
tdzy[k]=(String)tdglService.queryForObject("tdExcel.queryIdByXh",tdzy[k]);
if("".equals(tdzy[k])||tdzy[k]==null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组员学号有误";
breakother;
}
rs++;
}
td.setTdzy(tdzy);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组员不可为空";
breakother;
}
}
}
td.setRs(String.valueOf(rs));
tdxxList.add(td);
}
}
}catch(IOExceptione){
e.printStackTrace();
}
if("2".equals(sfcg)){
for(DrTdbtdxx:tdxxList){
tdglService.insert("tdExcel.addTdxx",tdxx);
tdglService.insert("tdExcel.addTdzz",tdxx);
tdglService.insert("tdExcel.addTdzy",tdxx);
tdglService.insert("tdExcel.addZdjs",tdxx);
}
}
map.put("sfcg",sfcg);
map.put("bcghs",bcghs);
map.put("bcgyy",bcgyy);
returnmap;
}
看不懂留言
Ⅱ 如何用java poi编写代码来设置Excel单元格是否锁定功能
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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;
/**
* @param inputFile 输入模板文件路径
* @param outputFile 输入文件存放于服务器路径
* @param dataList 待导岁芦出数据
* @throws Exception
* @roseuid:
*/
public void exportExcelFile(String inputFile, String outputFile, List dataList) throws Exception
{
/念前/用模板文件构造poi
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));
//创建模板工作表
HSSFWorkbook templatewb = new HSSFWorkbook(fs);
//直接取模板第一个sheet对象
HSSFSheet templateSheet = templatewb.getSheetAt(1);
//得到模板的第一个sheet的第一行对象 为了得到模板样式
HSSFRow templateRow = templateSheet.getRow(0);
//HSSFSheet timplateSheet = templatewb.getSheetAt(1);
//取得Excel文件的总列数
int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();
Debug.println("columns is : " + columns);
//创建样式数组
HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];
//一次性创建所有列的样式放在数组里
for (int s = 0; s < columns; s++)
{
//得到数组实例
styleArray[s] = templatewb.createCellStyle();
}
//循乎高带环对每一个单元格进行赋值
//定位行
for (int rowId = 1; rowId < dataList.size(); rowId++)
{
//依次取第rowId行数据 每一个数据是valueList
List valueList = (List) dataList.get(rowId - 1);
//定位列
for (int columnId = 0; columnId < columns; columnId++)
{
//依次取出对应与colunmId列的值
//每一个单元格的值
String dataValue = (String) valueList.get(columnId);
//取出colunmId列的的style
//模板每一列的样式
HSSFCellStyle style = styleArray[columnId];
//取模板第colunmId列的单元格对象
//模板单元格对象
HSSFCell templateCell = templateRow.getCell((short) columnId);
//创建一个新的rowId行 行对象
//新建的行对象
HSSFRow hssfRow = templateSheet.createRow(rowId);
//创建新的rowId行 columnId列 单元格对象
//新建的单元格对象
HSSFCell cell = hssfRow.createCell((short) columnId);
//如果对应的模板单元格 样式为非锁定
if (templateCell.getCellStyle().getLocked() == false)
{
//设置此列style为非锁定
style.setLocked(false);
//设置到新的单元格上
cell.setCellStyle(style);
}
//否则样式为锁定
else
{
//设置此列style为锁定
style.setLocked(true);
//设置到新单元格上
cell.setCellStyle(style);
}
//设置编码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//Debug.println("dataValue : " + dataValue);
//设置值 统一为String
cell.setCellValue(dataValue);
}
}
//设置输入流
FileOutputStream fOut = new FileOutputStream(outputFile);
//将模板的内容写到输出文件上
templatewb.write(fOut);
fOut.flush();
//操作结束,关闭文件
fOut.close();
}
Ⅲ java操作poi怎么更改excel中的数据
POI里可能没有这个机能。 不过你可以这样做。 把带有这个格式的Excel文件,做为模板。 每次把模板文件读进来,把自己要输出的数据填到对应的单元格里。 之后,把填完数据的Excel文件,保存到指定路径里。或者从浏览器里弹出。
Ⅳ 急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”
两个原因:
1.你的excel模版本身有问题,可以尝试新建一个模版。
2.你的excel使用了一些POI不支持的函数。
解决办法:
另存是由excel重写了完整的文件,可以解决问题。
关闭文件例子:
FileOutputStream os = new FileOutputStream("workbook.xls");
wb.write(os);
os.close();
Ⅳ java poi 在服务器生成excel文件
报格式错误是因为你没有填充EXCEL的内容。
正确的做法是:
1, HSSFWorkbook ws = new HSSFWorkbook();//建立新HSSFWorkbook对象
2, Sheet sheet = workbook.createSheet(0); //建立一个新的sheet
3,Row row = sheet.createRow(1); //建立一个新的row对象
4, Cell cell = row.createCell(0); //在row上创建方格即列,
cell.setCellValue(cellValue); //设置这个行中列的值
cell.setCellStyle(cellStyle); //设置样式