导航:首页 > 编程语言 > javapoi操作excel

javapoi操作excel

发布时间:2022-10-10 22:15:11

java poi导出excel要双击才显示换行

在开始选项卡下面有个玩意叫自动换行,点一下就好了。

❷ 如何使用poi进行excel单元格的查找和替换

参考spire.xls for java 的查找替换方法:


import com.spire.xls.CellRange;


mport com.spire.xls.ExcelVersion;


import com.spire.xls.Workbook;


import com.spire.xls.Worksheet;


public class ReplaceData {


public static void main(String[] args){

//创建Workbook实例


Workbook workbook = new Workbook();


//加载Excel文档


workbook.loadFromFile("Test.xlsx");



//获取第一个工作表


Worksheet worksheet = workbook.getWorksheets().get(0);

//查找工作表中的指定文字


CellRange[] ranges = worksheet.findAllString("合计", true, true);

for (CellRange range : ranges)


{


//替换为新文字


range.setText("替换");


}


//保存结果文档


workbook.saveToFile("ReplaceData.xlsx", ExcelVersion.Version2013);


}


}

参考自官网教程

❸ java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的

思路为:为了防止数字变成科学计数法方式表示,在源文件以及java代码中都用文本的方式去生成和解析excel,具体如下:

1.生成Excel时,设置单元格格式为STRING,即:

//关键代码
HSSFCellcell=newHSSFCell();
cell.setCellType(HSSFCell.CELL_TYPE_STRING);

2.同理,解析的时候,首先要保证源excel文件中该单元格格式是文本类型的,然后在java代码里用STRING类型去解析:

//关键代码
Stringvalue=cell.getStringCellValue();

❹ 如何用java poi操作excel

注解类(将实体类加上该注解)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelField
{
//导出字段在excel中的名字
String title();
}

操作类(调用方法进行导出)
@Slf4j
public class ExcelUtil {

private static final int EXCEL_NUM_LIMIT = 200000;

/**
* 通用导出方法
*/
public static <T> void writeExcel(HttpServletResponse response, String fileName, List<T> list, Class<T> cls) {
// 1.创建一个workbook,对应一个Excel文件
SXSSFWorkbook workBook = new SXSSFWorkbook();
int page = list.size() % EXCEL_NUM_LIMIT == 0 ? list.size() / EXCEL_NUM_LIMIT : list.size() / EXCEL_NUM_LIMIT + 1;
log.info("sheet数量为:{}", page);
for (int m = 0; m < page; m++) {

Field[] fields = cls.getDeclaredFields();

ArrayList<String> headList = new ArrayList<>();

for (Field f : fields) {
ExcelField field = f.getAnnotation(ExcelField.class);
if (field != null) {
headList.add(field.title());
}
}

CellStyle style = getCellStyle(workBook);
Sheet sheet = workBook.createSheet();
workBook.setSheetName(m, "sheet" + String.valueOf(m + 1));
Header header = sheet.getHeader();
header.setCenter("sheet");

// 设置Excel表的第一行即表头
Row row = sheet.createRow(0);
for (int i = 0; i < headList.size(); i++) {
Cell headCell = row.createCell(i);
headCell.setCellType(CellType.STRING);
headCell.setCellStyle(style);//设置表头样式
headCell.setCellValue(String.valueOf(headList.get(i)));
sheet.setColumnWidth(i, 15 * 256);
}

int rowIndex = 1;
log.info("开始创建sheet{}", m);
int start = (EXCEL_NUM_LIMIT * m);
int end = list.size() - start >= EXCEL_NUM_LIMIT ? start + EXCEL_NUM_LIMIT : list.size();
log.info("开始{},结束{}", start, end);
for (int i = start; i < end; i++) {
Row rowData = sheet.createRow(rowIndex);//创建数据行
T q = list.get(i);
Field[] ff = q.getClass().getDeclaredFields();
int j = 0;
for (Field f : ff) {
ExcelField field = f.getAnnotation(ExcelField.class);
if (field == null) {
continue;
}
f.setAccessible(true);
Object obj = null;
try {
obj = f.get(q);
} catch (IllegalAccessException e) {
log.error("", e);
}
Cell cell = rowData.createCell(j);
cell.setCellType(CellType.STRING);
// 当数字时
if (obj instanceof Integer) cell.setCellValue((Integer) obj);
// 当Long时
if (obj instanceof Long) cell.setCellValue((Long) obj);
// 当为字符串时
if (obj instanceof String) cell.setCellValue((String) obj);
// 当为布尔时
if (obj instanceof Boolean) cell.setCellValue((Boolean) obj);
// 当为时间时
if (obj instanceof Date) cell.setCellValue(getFormatDate((Date) obj));
// 当为时间时
if (obj instanceof Calendar) cell.setCellValue((Calendar) obj);
// 当为小数时
if (obj instanceof Double) cell.setCellValue((Double) obj);
// 当为BigDecimal
if (obj instanceof BigDecimal) cell.setCellValue(Double.parseDouble(obj.toString()));
// 当ZonedDateTime
if (obj instanceof ZonedDateTime)
cell.setCellValue(((ZonedDateTime) obj).format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")));
j++;
}
rowIndex++;
}
}

responseStream(workBook, response, fileName);
}

private static void responseStream(SXSSFWorkbook workBook, HttpServletResponse response, String fileName) {
OutputStream outputStream = null;
try {
response.setContentType("application/vnd.ms-excel; charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xlsx").getBytes("UTF-8"), "ISO-8859-1"));
response.setCharacterEncoding("utf-8");
//根据传进来的file对象创建可写入的Excel工作薄
outputStream = response.getOutputStream();
log.info("数据导出Excel成功!");
workBook.write(outputStream);
} catch (IOException e) {
log.error("", e);
} finally {
try {
outputStream.close();
} catch (IOException e) {
log.error("", e);
}
}
}

/**
* 设置表头样式
*
* @param wb
* @return
*/
public static CellStyle getCellStyle(SXSSFWorkbook wb) {
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 12);//设置字体大小
font.setBold(true);//加粗
style.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex());// 设置背景色
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setAlignment(HorizontalAlignment.CENTER);//让单元格居中
style.setAlignment(HorizontalAlignment.CENTER_SELECTION);// 左右居中
style.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中
style.setWrapText(true);//设置自动换行
style.setFont(font);
return style;
}

public static String getFormatDate(Date date) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String dateString = formatter.format(date);
return dateString;
}

}

❺ Java POI操作Excel文件,打开该文件然后关闭时的保存问题

同问同问,有木有人遇到过,并解决了的?
已经解决:在setSheet的值后,加入workBook.getCreationHelper().createFormulaEvaluator().evaluateAll();即可

❻ java操作poi怎么更改excel中的数据

POI里可能没有这个机能。 不过你可以这样做。 把带有这个格式的Excel文件,做为模板。 每次把模板文件读进来,把自己要输出的数据填到对应的单元格里。 之后,把填完数据的Excel文件,保存到指定路径里。或者从浏览器里弹出。

❼ java操作poi怎么更改excel中的数据

修改完需要写入,也就是保存一下的。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

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;

public class ChangeCell {

@SuppressWarnings("deprecation")
public static void main(String[] args) {
String fileToBeRead = "C:\\exp.xls"; // excel位置
int coloum = 1; // 比如你要获取第1列
try {
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(
fileToBeRead));
HSSFSheet sheet = workbook.getSheet("Sheet1");

for (int i = 0; i <= sheet.getLastRowNum(); i++) {
HSSFRow row = sheet.getRow((short) i);
if (null == row) {
continue;
} else {
HSSFCell cell = row.getCell((short) coloum);
if (null == cell) {
continue;
} else {
System.out.println(cell.getNumericCellValue());
int temp = (int) cell.getNumericCellValue();
cell.setCellValue(temp + 1);
}
}
}
FileOutputStream out = null;
try {
out = new FileOutputStream(fileToBeRead);
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

}

❽ java poi 操作excel 问题

首先回答你第一个问题:

读取注解代码如下:
Comment comment = sheet.getRow(7).getCell(5, Row.CREATE_NULL_AS_BLANK).getCellComment();

根据批注定位单元格做不到。。。

❾ java poi怎么获取excel单元格的内容

packagee.sjtu.erplab.poi;

importjava.io.InputStream&ch=ww.xqy.chain"target="_blank"class="link-ke">FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.Map;

importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFDateUtil;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
*操作Excel表格的功能类
*/
publicclassExcelReader{
privatePOIFSFileSystemfs;
privateHSSFWorkbookwb;
privateHSSFSheetsheet;
privateHSSFRowrow;

/**
*读取Excel表格表头的内容
*@paramInputStream
*@returnString表头内容的数组
*/
publicString[]readExcelTitle(InputStreamis){
try{
fs=newPOIFSFileSystem(is);
wb=newHSSFWorkbook(fs);
}catch(IOExceptione){
e.printStackTrace();
}
sheet=wb.getSheetAt(0);
row=sheet.getRow(0);
//标题总列数
intcolNum=row.getPhysicalNumberOfCells();
System.out.println("colNum:"+colNum);
String[]title=newString[colNum];
for(inti=0;i<colNum;i++){
//title[i]=getStringCellValue(row.getCell((short)i));
title[i]=getCellFormatValue(row.getCell((short)i));
}
returntitle;
}

/**
*读取Excel数据内容
*@paramInputStream
*@returnMap包含单元格数据内容的Map对象
*/
publicMap<Integer,String>readExcelContent(InputStreamis){
Map<Integer,String>content=newHashMap<Integer,String>();
Stringstr="";
try{
fs=newPOIFSFileSystem(is);
wb=newHSSFWorkbook(fs);
}catch(IOExceptione){
e.printStackTrace();
}
sheet=wb.getSheetAt(0);
//得到总行数
introwNum=sheet.getLastRowNum();
row=sheet.getRow(0);
intcolNum=row.getPhysicalNumberOfCells();
//正文内容应该从第二行开始,第一行为表头的标题
for(inti=1;i<=rowNum;i++){
row=sheet.getRow(i);
intj=0;
while(j<colNum){
//每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
//也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
//str+=getStringCellValue(row.getCell((short)j)).trim()+
//"-";
str+=getCellFormatValue(row.getCell((short)j)).trim()+"";
j++;
}
content.put(i,str);
str="";
}
returncontent;
}

/**
*获取单元格数据内容为字符串类型的数据
*
*@paramcellExcel单元格
*@returnString单元格数据内容
*/
(HSSFCellcell){
StringstrCell="";
switch(cell.getCellType()){
caseHSSFCell.CELL_TYPE_STRING:
strCell=cell.getStringCellValue();
break;
caseHSSFCell.CELL_TYPE_NUMERIC:
strCell=String.valueOf(cell.getNumericCellValue());
break;
caseHSSFCell.CELL_TYPE_BOOLEAN:
strCell=String.valueOf(cell.getBooleanCellValue());
break;
caseHSSFCell.CELL_TYPE_BLANK:
strCell="";
break;
default:
strCell="";
break;
}
if(strCell.equals("")||strCell==null){
return"";
}
if(cell==null){
return"";
}
returnstrCell;
}

/**
*获取单元格数据内容为日期类型的数据
*
*@paramcell
*Excel单元格
*@returnString单元格数据内容
*/
privateStringgetDateCellValue(HSSFCellcell){
Stringresult="";
try{
intcellType=cell.getCellType();
if(cellType==HSSFCell.CELL_TYPE_NUMERIC){
Datedate=cell.getDateCellValue();
result=(date.getYear()+1900)+"-"+(date.getMonth()+1)
+"-"+date.getDate();
}elseif(cellType==HSSFCell.CELL_TYPE_STRING){
Stringdate=getStringCellValue(cell);
result=date.replaceAll("[年月]","-").replace("日","").trim();
}elseif(cellType==HSSFCell.CELL_TYPE_BLANK){
result="";
}
}catch(Exceptione){
System.out.println("日期格式不正确!");
e.printStackTrace();
}
returnresult;
}

/**
*根据HSSFCell类型设置数据
*@paramcell
*@return
*/
(HSSFCellcell){
Stringcellvalue="";
if(cell!=null){
//判断当前Cell的Type
switch(cell.getCellType()){
//如果当前Cell的Type为NUMERIC
caseHSSFCell.CELL_TYPE_NUMERIC:
caseHSSFCell.CELL_TYPE_FORMULA:{
//判断当前的cell是否为Date
if(HSSFDateUtil.isCellDateFormatted(cell)){
//如果是Date类型则,转化为Data格式

//方法1:这样子的data格式是带时分秒的:2011-10-120:00:00
//cellvalue=cell.getDateCellValue().toLocaleString();

//方法2:这样子的data格式是不带带时分秒的:2011-10-12
Datedate=cell.getDateCellValue();
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
cellvalue=sdf.format(date);

}
//如果是纯数字
else{
//取得当前Cell的数值
cellvalue=String.valueOf(cell.getNumericCellValue());
}
break;
}
//如果当前Cell的Type为STRIN
caseHSSFCell.CELL_TYPE_STRING:
//取得当前的Cell字符串
cellvalue=cell.getRichStringCellValue().getString();
break;
//默认的Cell值
default:
cellvalue="";
}
}else{
cellvalue="";
}
returncellvalue;

}

publicstaticvoidmain(String[]args){
try{
//对读取Excel表格标题测试
InputStreamis=newFileInputStream("d:\test2.xls");
ExcelReaderexcelReader=newExcelReader();
String[]title=excelReader.readExcelTitle(is);
System.out.println("获得Excel表格的标题:");
for(Strings:title){
System.out.print(s+"");
}

//对读取Excel表格内容测试
InputStreamis2=newFileInputStream("d:\test2.xls");
Map<Integer,String>map=excelReader.readExcelContent(is2);
System.out.println("获得Excel表格的内容:");
for(inti=1;i<=map.size();i++){
System.out.println(map.get(i));
}

}catch(FileNotFoundExceptione){
System.out.println("未找到指定路径的文件!");
e.printStackTrace();
}
}
}

阅读全文

与javapoi操作excel相关的资料

热点内容
安卓手机如何录制视频长时间 浏览:283
安全问题app哪个好 浏览:445
压缩水会变冰吗 浏览:526
小说配音app哪个靠谱 浏览:820
编译iso 浏览:944
照片生成pdf格式 浏览:194
病历转pdf 浏览:835
云服务器配硬件 浏览:978
服务器10k什么意思 浏览:21
pdfeditor汉化 浏览:884
新科学pdf 浏览:746
现在还有c语言编译吗 浏览:675
哪里买到单片机 浏览:480
linux文件打开数量 浏览:510
编译原理中什么是l属性文法 浏览:372
硬盘加密时出现的问题 浏览:61
如何退域命令 浏览:108
看书的app哪里看 浏览:291
服务器怎么调大 浏览:3
android天气apijson 浏览:984