发布时间:2023-10-13 06:00来源:www.sf1369.com作者:宇宇
通过POI的使用获取到要导出的Excel工作簿,将其写入输出流。
然后输出流内容会随响应信息传导浏览器前端,弹出保存窗口,选择你要保存的位置。
你试试设置一下单元格的编码 cell.setCellType(HSSFCell.ENCODING_UTF_8);
要提取Excel中的工作表(sheet)名称,你可以使用各种编程语言中的Excel库或工具来实现。以下是几种常见的方法:
1. 在Python中使用openpyxl库:
```
import openpyxl
# 打开Excel文件
workbook = openpyxl.load_workbook('filename.xlsx')
# 获取所有工作表的名称
sheet_names = workbook.sheetnames
# 打印工作表名称
for sheet_name in sheet_names:
print(sheet_name)
```
2. 在Java中使用Apache POI库:
```java
import org.apache.poi.ss.usermodel.*;
// 打开Excel文件
Workbook workbook = WorkbookFactory.create(new File("filename.xlsx"));
// 获取所有工作表的数量
int totalSheets = workbook.getNumberOfSheets();
// 获取所有工作表的名称
for (int i = 0; i < totalSheets; i++) {
String sheetName = workbook.getSheetName(i);
System.out.println(sheetName);
}
```
以上示例代码仅以Python和Java为例,其他编程语言也有相应的Excel库或工具可用。你可以根据所使用的编程语言选择相应的库来完成工作表名称的提取。
Poi可以通过创建一个Hyperlink来添加链接。首先,你需要创建一个XSSFWorkbook对象代表你的Excel文件。
然后,你需要创建一个样式,用于创建超链接样式。接下来,你需要创建一个Hyperlink对象,设置链接地址和样式,最后将Hyperlink对象添加到单元格中即可。
下面是一个简单的示例代码:```XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet("Sheet1"); XSSFCellStyle linkStyle = workbook.createCellStyle();Font font = workbook.createFont();font.setUnderline(Font.U_SINGLE);font.setColor(IndexedColors.BLUE.getIndex());linkStyle.setFont(font); XSSFCell cell = sheet.createRow(0).createCell(0);cell.setCellValue("Link Text");Hyperlink link = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL);link.setAddress("https://www.example.com");linkStyle.setWrapText(true); //设置自动换行 cell.setHyperlink(link);cell.setCellStyle(linkStyle);```
星瑞领航系统是一款车载导航系统,其具有多种功能和设置选项。以下是针对大多数星瑞领航系统的设置步骤:
1. 打开导航软件:按下导航系统上的电源按钮,等待几秒钟,屏幕上会显示导航软件图标。点击该图标即可进入导航软件。
2. 设置起点和终点:在主界面上选择“目的地”或“导航”,接着输入您的目的地地址或使用语音输入功能。
3. 设置路线偏好:星瑞领航系统支持多种不同路线偏好设置。您可以选择最短路径、最快路径或避免拥堵等不同选项。
4. 设置语音提示:您可以选择是否启用声音提示,并选择语音提示的音量和语言。
5. 实时交通信息:星瑞领航系统可以提供实时路况信息,以便您能够选择最优路线。这个功能默认是开启的,但您也可以手动关闭。
6. 搜索附近兴趣点(POI):如果你想搜索周围停车场、餐厅、加油站等地点,您可以在主界面上点击“附近”按钮并输入相关关键字进行搜索。
7. 更新地图和软件:星瑞领航系统需要定期更新地图和软件以获取最新信息和最新功能。
需要注意的是,不同型号和版本的星瑞领航系统可能会有稍微不同的设置选项。建议您在使用前仔细阅读用户手册或咨询厂商或专业技术人员。
首先要导入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 >
<div >
<label ><input id="excel_file" type="file" name="filename" accept="xls"/></label>
<div >
<input id="excel_button" type="submit" value="导入Excel"/>
</div>
</div>
</div>
<div >
<button type="button" data-dismiss="modal" onClick="uncheckBoxes();">取消</button>
</div>
b.后台spring的controller进行相关操作,这里主要讲的是使用spring上传文件,和读取文件信息。
使用spring上传文件之前,需要配置bean。
<bean id="multipartResolver" ></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 = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
brandMobileInfo = new BrandMobileInfoEntity();
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
for (int i = 0; i < 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 ==