问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA编程中用Apache POI 怎么用SXSSFWorkbook对已存在的excel(.xlsx)操作进行写数据操作

发布网友 发布时间:2022-04-25 17:18

我来回答

5个回答

热心网友 时间:2023-10-22 05:25

XSSFWorkbook wb=new XSSFWorkbook(参数);中的参数是InputStream ,你直接XSSFWorkbook wb=new XSSFWorkbook(fs);就可以了。

第一步查询数据--这一步读者自行实现自己的数据查询 List<PointInfo> points = null;

points = this..getAllCollect(userId);

final Map<String, List<PointInfo>> pointMap = new HashMap<>();

for (final PointInfo pointInfo : points) {

final String pt = pointInfo.getPointType(); if (pointMap.containsKey(pt)) {final List<PointInfo> subList = pointMap.get(pt);

subList.add(pointInfo);

} else {final List<PointInfo> subList = new ArrayList<>();subList.add(pointInfo);

pointMap.put(pt, subList

第二步:生成工作簿

final SXSSFWorkbook wb = new SXSSFWorkbook();

// 对每一种类型生成一个sheet

for (final Map.Entry<String, List<PointInfo>> entry : pointMap.entrySet()) {

final List<PointInfo> pts = entry.getValue();

// 获取每种类型的名字--作为sheet显示名称--如果不需要分sheet可忽略

String typeName = "";

if (this..getTypeByTypeCode(pts.get(0).getPointType()) != null) {

typeName = this..getTypeByTypeCode(pts.get(0).getPointType()).getPointTypeName();

}

final Sheet sheet = wb.createSheet(typeName);

//生成用于插入图片的容器--这个方法返回的类型在老api中不同

final Drawing patriarch = sheet.createDrawingPatriarch();

// 为sheet1生成第一行,用于放表头信息

final Row row = sheet.createRow(0);

// 第一行的第一个单元格的值

Cell cell = row.createCell((short) 0);

cell.setCellValue("详细地址");

cell = row.createCell((short) 1);

cell.setCellValue("经度");

cell = row.createCell((short) 2);

cell.setCellValue("纬度");

cell = row.createCell((short) 3);

for (int i = 0; i < pts.size(); i++) {

final Row each = sheet.createRow(i + 1);

Cell infoCell = each.createCell((short) 0);

infoCell.setCellValue(pts.get(i).getAddrDetail());

infoCell = each.createCell((short) 1);

infoCell.setCellValue(pts.get(i).getX());

infoCell = each.createCell((short) 2);

infoCell.setCellValue(pts.get(i).getY());

infoCell = each.createCell((short) 3);

//查询获取图片路径信息--该步读者自定义

PointPic pic = this..getPicInfoByPointId(pts.get(i).getId());

try {

if (pic != null) {

for (int k = 0; k < 6; k++) {//因为有六张图片,所以循环6次

final short colNum = (short) (4+k);

infoCell = each.createCell(colNum);

BufferedImage img = null;

switch (k) {

case 0:

if (!StringUtils.isEmpty(pic.getPicOneAddr())) {

File imgFile = new File(pic.getPicOneAddr());

img = ImageIO.read(imgFile);

imgFile = null;

}

break;

case 1:

if (!StringUtils.isEmpty(pic.getPicTwoAddr())) {

File imgFile = new File(pic.getPicTwoAddr());

img = ImageIO.read(imgFile);

imgFile = null;

}

break;

case 2:

if (!StringUtils.isEmpty(pic.getPicThreeAddr())) {

File imgFile = new File(pic.getPicThreeAddr());

img = ImageIO.read(imgFile);

imgFile = null;

}

break;

case 3:

if (!StringUtils.isEmpty(pic.getPicFourAddr())) {

File imgFile = new File(pic.getPicFourAddr());

img = ImageIO.read(imgFile);

imgFile = null;

}

break;

case 4:

if (!StringUtils.isEmpty(pic.getPicFiveAddr())) {

File imgFile = new File(pic.getPicFiveAddr());

img = ImageIO.read(imgFile);

imgFile = null;

}

break;

case 5:

if (!StringUtils.isEmpty(pic.getPicSixAddr())) {

File imgFile = new File(pic.getPicSixAddr());

img = ImageIO.read(imgFile);

imgFile = null;

}

break;

}

ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

ImageIO.write(img, "jpg", byteArrayOut);

img = null;

//设置每张图片插入位置

final XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, colNum,

i + 1, (short) (colNum + 1), i + 2);//参数为图片插入在表格的坐标,可以自行查看api研究参数

anchor.setAnchorType(0);

// 插入图片

patriarch.createPicture(anchor, wb.addPicture(

byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

byteArrayOut.close();

byteArrayOut = null;

}

pic = null;

}

} catch (final Exception e) {

e.printStackTrace();

}

}

}

final ByteArrayOutputStream os = new ByteArrayOutputStream();

try {

wb.write(os);

} catch (final IOException e) {

e.printStackTrace();

}

final byte[] content = os.toByteArray();

final String url = Var.BASE_URL+ File.separator + "output.xls";//读者自定义路径

final File file = new File(url);// Excel文件生成后存储的位置。

OutputStream fos = null;

try {

fos = new FileOutputStream(file);

fos.write(content);

os.close();

fos.close();

} catch (final Exception e) {

e.printStackTrace();

}

return url;//文件保存成功

热心网友 时间:2023-10-22 05:26

public SXSSFWorkbook(XSSFWorkbook workbook)

API文档里面有,反正就是说,使用SXSSFWorkbook附加数据到已经存在的Excel中的话就是不行的;SXSSFSheet.getRow(int) 和 SXSSFRow.getCell(int) 会返回空。

SXSSFWorkbook只能用在新创建Excel中才行。

热心网友 时间:2023-10-22 05:26

XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(fileName));
SXSSFWorkbook wb = new SXSSFWorkbook(xwb,100);
SXSSFSheet sxssfSheet = wb.getSheetAt(1);
SXSSFRow sxssfRow = sxssfSheet.getRow(1);
SXSSFCell sxssfCell = sxssfRow.getCell(1);
sxssfCell.getStringCellValue();
XSSFSheet xSheet = xwb.getSheetAt(1); // 获取excel表的sheet
for (Map.Entry cEntry : cMap.entrySet()) {
String[] aString = cEntry.getKey().toString().split("_");
String ip = "10.240." + aString[3] + "." + aString[4];
System.out.println(ip+"---vale---");
int line = Integer.parseInt(cEntry.getKey().toString().substring(0, cEntry.getKey().toString().indexOf("$")));
XSSFCell l2 = xSheet.getRow(line).getCell(3);
XSSFRow row222 = xSheet.getRow(line);
if(ipMap.get(ip)!=null){
l2.setCellValue(cEntry.getValue() + ipMap.get(ip));
}else{代码如上:SXSSFCell sxssfCell = sxssfRow.getCell(1);NullPointerException,也就是说只能用XSSFWorkbook去读用SXSSFWorkbook创建一个新的表去写

热心网友 时间:2023-10-22 05:27

XSSFWorkbook wb=new XSSFWorkbook(参数);中的参数是InputStream ,你直接XSSFWorkbook wb=new XSSFWorkbook(fs);就可以了。

热心网友 时间:2023-10-22 05:28

XSSFWorkbookwb=newXSSFWorkbook(参数);中的参数是InputStream,你直接XSSFWorkbookwb=newXSSFWorkbook(fs);就可以了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉大学在职研究生考试科目有哪些 报考武汉大学在职研究生录取率高吗? 武汉大学mpa在职研究生好考吗 忘记车子买哪家保险 怎么查 67年的羊和什么生肖最配夫妻 67年的羊和69年鸡相配吗? 67年羊男与69年鸡女同是11月出生婚配如何? 67年9月和69年十月的结婚 “新菊亦侵篱”的出处是哪里 “闲绕篱头看菊花”的出处是哪里 Java操作Excel文件时,如何设置cell内的文字居中 学会如何用Java操作Excel文件,有一个文本文件,可以将里面内容读 java怎么读取上传的excel文件 Java用什么类操作Excel、Word 电热水器冷水正常,热水几乎没有水是什么原因 为什么热水器用用的就突然没水,一会儿又来水 热水器有热水突然不出热水了 我家的电热水器突然不出水,请问是什么原因呢。 如何办理出口退税证 请问怎样办理出口及退税? 如何办理出口退税求解 我公司是一家有进出口权的公司,如何办理出口退税呢?求详细流程。 辽宁省国税局出口退税远程申报系统密码记不住了怎么办 吃桃胶什么时间吃最好 吃桃胶多长时间可以见效果? 吃桃胶多长时间,身体有效果? 微信怎么调来信息的声音 在新浪微博:&quot;根据您的设置,在登录微博前需要填写验证码完成登录。&quot;怎么取消呀 新用户怎样在手机上注册微博账户名?如果手机验证码登录的话,没有密码... 登陆微博提示我在陌生设备上登陆需发送验证码到以前的手机号,但是我原... windows7怎么打开系统保护 怎么打开系统保护 怎样打开系统保护 我要怎么打开c盘的系统保护? w7怎么打开系统保护 系统提示系统保护已关闭,如何开启 电脑w10怎么打开系统保护 win7进不去桌面怎么打开系统保护 windows7如何开启系统保护 太阳能热水器上水后几小时后水自动没有了怎么回事?水流哪去了? 电脑时间显示字体大小? 如何改变WIN7系统右下角时钟的字体 任务栏显示的时间字体大小 能调吗? win7旗舰版电脑桌面右下角时间旁边设置文字 我的系统是windows7 任务栏显示的时间字体大小 能调吗? 我的这个太大了 电脑任务栏中右下角的时间字体怎样调小点,详细点说 WIN7系统下如何更改桌面时间显示的字体和颜色 电脑右下角的时间字体总自己变大。注意是显示时间的字体,不是电脑系统的字体! 怎么样设置在桌面右下角的时间左边显示字体 怎样修改win7 右下角 时间 字体颜色