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

java *** 作poi怎么更改excel中的数据,第1张

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

首先要导入spring相关包,poi,和fileupload包,我是使用maven构建的。

一.导入excel

(1)使用spring上传巧键文件

a.前台页面提交

<form name="excelImportForm" action="${pageContext.request.contextPath}/brand/importBrandSort" method="post" onsubmit="return checkImportPath()"孝御巧 enctype="multipart/form-data" id="excelImportForm">

<input type="hidden" name="ids" id="ids">

<div class="modal-body">

<div class="row gap">

<label class="col-sm-7 control-label"><input class="btn btn-default" id="excel_file" type="file" name="filename" accept="xls"/></label>

<div class="col-sm-3">

<input class="btn btn-primary" id="excel_button" type="submit" value="导入Excel"/>

</div>

</div>

</div>

<div class="modal-footer">

<button type="button" class="btn btn-default" data-dismiss="modal" onClick="uncheckBoxes()">取消</button>

<拆逗/div>

b.后台spring的controller进行相关 *** 作,这里主要讲的是使用spring上传文件,和读取文件信息

使用spring上传文件之前,需要配置bean。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>@RequestMapping(value = "/importBrandSort", method = RequestMethod.POST)

public ModelAndView importBrandSort(@RequestParam("filename") MultipartFile file,

HttpServletRequest request,HttpServletResponse response) throws Exception {

String temp = request.getSession().getServletContext()

.getRealPath(File.separator)

+ "temp"// 临时目录

File tempFile = new File(temp)

if (!tempFile.exists()) {

tempFile.mkdirs()

}

DiskFileUpload fu = new DiskFileUpload()

fu.setSizeMax(10 * 1024 * 1024)// 设置允许用户上传文件大小,单位:位

fu.setSizeThreshold(4096)// 设置最多只允许在内存中存储的数据,单位:位

fu.setRepositoryPath(temp)// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

// 开始读取上传信息

//

int index = 0

/* List fileItems = null

try {

fileItems = fu.parseRequest(request)

}

catch (Exception e) {

e.printStackTrace()

}

Iterator iter = fileItems.iterator()// 依次处理每个上传的文件

FileItem fileItem = null

while (iter.hasNext()) {

FileItem item = (FileItem) iter.next()// 忽略其他不是文件域的所有表单信息

if (!item.isFormField()) {

fileItem = item

// index++

}

}

if (fileItem == null)

return null

*/

if (file == null)

return null

logger.info(file.getOriginalFilename())

String name = file.getOriginalFilename()// 获取上传文件名,包括路径

//name = name.substring(name.lastIndexOf("\\") + 1)// 从全路径中提取文件名

long size = file.getSize()

if ((name == null || name.equals("")) &&size == 0)

return null

InputStream in = file.getInputStream()

List<BrandMobileInfoEntity>BrandMobileInfos = brandService

.importBrandPeriodSort(in)

// 改为人工刷新缓存KeyContextManager.clearPeriodCacheData(new

// PeriodDimensions())// 清理所有缓存

int count = BrandMobileInfos.size()

String strAlertMsg =""

if(count!=0){

strAlertMsg= "成功导入" + count + "条!"

}else {

strAlertMsg = "导入失败!"

}

logger.info(strAlertMsg)

//request.setAttribute("brandPeriodSortList", BrandMobileInfos)

//request.setAttribute("strAlertMsg", strAlertMsg)

request.getSession().setAttribute("msg",strAlertMsg)

return get(request, response)

//return null

}

代码中的注释部分是如果不使用spring的方式,如何拿到提交过来的文件名(需要是要apache的一些工具包),其实使用spring的也是一样,只是已经做好了封装,方便我们写代码

代码中的后半部分是读取完上传文文件的信息和对数据库进行更新之后,输出到前台页面的信息。

上述代码中: InputStream in = file.getInputStream()

List<BrandMobileInfoEntity>BrandMobileInfos = brandService

.importBrandPeriodSort(in)读取excel的信息。

(2)使用poi读取excel

a.更新数据库

@Override

public List<BrandMobileInfoEntity>importBrandPeriodSort(InputStream in) throws Exception {

List<BrandMobileInfoEntity>brandMobileInfos = readBrandPeriodSorXls(in)

for (BrandMobileInfoEntity brandMobileInfo : brandMobileInfos) {

mapper.updateByConditions(brandMobileInfo)

}

return brandMobileInfos

}

这部分是sevice层的代码,用于读取excel信息之后更新数据库数据,我这里是使用mybatis。定义一个类BrandMobileInfoEntity,用与保存excel表每一行的信息,而List<BrandMobileInfoEntity >则保存了全部信息,利用这些信息对数据库进行更新。

b.读取excel信息

private List<BrandMobileInfoEntity>readBrandPeriodSorXls(InputStream is)

throws IOException, ParseException {

HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is)

List<BrandMobileInfoEntity>brandMobileInfos = new ArrayList<BrandMobileInfoEntity>()

BrandMobileInfoEntity brandMobileInfo

// 循环工作表Sheet

for (int numSheet = 0

numSheet <hssfWorkbook.getNumberOfSheets()numSheet++) {

HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet)

if (hssfSheet == null) {

continue

}

// 循环行Row

for (int rowNum = 1rowNum <= hssfSheet.getLastRowNum()rowNum++) {

brandMobileInfo = new BrandMobileInfoEntity()

HSSFRow hssfRow = hssfSheet.getRow(rowNum)

for (int i = 0i <hssfRow.getLastCellNum()i++) {

HSSFCell brandIdHSSFCell = hssfRow.getCell(i)

if (i == 0) {

brandMobileInfo.setBrandId(Integer

.parseInt(getCellValue(brandIdHSSFCell)))

} else if (i == 1) {

continue

} else if (i == 2) {

brandMobileInfo.setMobileShowFrom(Integer.parseInt(getCellValue(brandIdHSSFCell)))

} else if (i == 3) {

brandMobileInfo.setMobileShowTo(Integer.parseInt(getCellValue(brandIdHSSFCell)))

} else if (i == 4) {

brandMobileInfo.setSellMarkValue(getCellValue(brandIdHSSFCell))

} else if (i == 5) {

brandMobileInfo.setWarehouse(getCellValue(brandIdHSSFCell))

} else if (i == 6) {

brandMobileInfo.setSortA1(Integer.parseInt(getCellValue(brandIdHSSFCell)))

} else if (i == 7) {

brandMobileInfo.setSortA2(Integer.parseInt(getCellValue(brandIdHSSFCell)))

} else if (i == 8) {

brandMobileInfo.setSortB(Integer.parseInt(getCellValue(brandIdHSSFCell)))

} else if (i == 9) {

brandMobileInfo.setSortC10(Integer.parseInt(getCellValue(brandIdHSSFCell)))

}

else if (i == 10) {

brandMobileInfo.setSortC(Integer.parseInt(getCellValue(brandIdHSSFCell)))

} else if (i == 11) {

brandMobileInfo.setHitA(getCellValue(brandIdHSSFCell))

} else if (i == 12) {

brandMobileInfo.setHitB(getCellValue(brandIdHSSFCell))

} else if (i == 13) {

brandMobileInfo.setHitC(getCellValue(brandIdHSSFCell))

} else if (i == 14) {

brandMobileInfo.setCustomSellType(getCellValue(brandIdHSSFCell))

}else if (i == 15)

{

continue

}else if (i == 16) {

brandMobileInfo.setChannelId(Integer.parseInt(getCellValue(brandIdHSSFCell)))

}

}

brandMobileInfos.add(brandMobileInfo)

}

}

return brandMobileInfos

}

这种代码有点搓,还没有优化,可以大概看到是怎么读取信息的。

(3)使用mybatis更新数据。

在Java中悔毁穗使用POI将Word文档转换为PDF需要以下步骤:

添加POI和相关的依赖库,例如:poi-ooxml、poi-ooxml-schemas和itextpdf等。

加载Word文档:

java

InputStream inputStream = new FileInputStream("test.docx")

XWPFDocument document = new XWPFDocument(inputStream)

创建PDF输出流:

java

OutputStream outputStream = new FileOutputStream("test.pdf")

PdfOptions options = PdfOptions.create()

使用POI中提供的方法将Word文档转换为PDF:

scss

PdfConverter.getInstance().convert(document, outputStream, options)

关闭输入输出流:

go

Copy code

inputStream.close()

outputStream.close()

完整代码示例:

java

import java.io.FileInputStream

import java.io.FileOutputStream

import java.io.InputStream

import java.io.OutputStream

import org.apache.poi.xwpf.usermodel.XWPFDocument

import org.apache.poi.xwpf.converter.pdf.PdfOptions

import org.apache.poi.xwpf.converter.pdf.PdfConverter

public class WordToPDFConverter {

public static void main(String[] args) throws Exception {

InputStream inputStream = new FileInputStream("test.docx")

XWPFDocument document = new XWPFDocument(inputStream)

OutputStream outputStream = new FileOutputStream("test.pdf")

PdfOptions options = PdfOptions.create()

PdfConverter.getInstance().convert(document, outputStream, options)

inputStream.close()

outputStream.close()

}

}

请注意,该方法依赖于 *** 作系统上安装的MS Office软件,因此需要确保系统上安装了MS Office并配置碧卜了正确余陵的环境变量。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12305754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存