一.导入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并配置碧卜了正确余陵的环境变量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)