poi导入导出excel文件,兼容.xls和.xlsx两种格式

这个是测试类:

package com.fishroad.util;

import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;

import javax.swing.JOptionPane;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ImportExcel {

	private final static String XLS = "xls";

	private final static String XLSX = "xlsx";

	public static void main(String[] args) {
		String path = UtilTools.getDirPath();
		String extensionName = UtilTools.getFileExtName(path);
		// System.out.println(extensionName);

		Workbook workbook = null;

		try {

			if (extensionName.toLowerCase().equals(XLS)) {
				workbook = new HSSFWorkbook(new FileInputStream(new File(path)));
			} else if (extensionName.toLowerCase().equals(XLSX)) {
				workbook = new XSSFWorkbook(new FileInputStream(new File(path)));
			}
			Sheet sheet = workbook.getSheetAt(0);

			int minRowIx = sheet.getFirstRowNum();
			int maxRowIx = sheet.getLastRowNum();
			for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) {
				Row row = sheet.getRow(rowIx);
				//Cell cell = row.getCell(0);
				int minCellIx = row.getFirstCellNum();
				int maxCellIx = row.getLastCellNum();
				for(int cellIx = minCellIx;cellIx<=maxCellIx;cellIx++){
					Cell cell = row.getCell(cellIx);
					if (cell != null) {
						String a = getValue(cell);
						if(a==null || "".equals(a)){
							System.out.println("---******----");
						}
						
						System.out.println(a);
					}else{
						System.out.println(cellIx+"---******----");
					}
					
				}
				/*if (cell != null) {
					String a = cell.getStringCellValue();
					System.out.println(a);
				}*/
			}

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "导入文件出错!");
		}

	}
	
	
	private static String getValue(Cell hssfCell) {
		
        if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
            // 返回布尔类型的值
            return String.valueOf(hssfCell.getBooleanCellValue());
        } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
        	if(HSSFDateUtil.isCellDateFormatted(hssfCell)){
        		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				return sdf.format(HSSFDateUtil.getJavaDate(hssfCell.getNumericCellValue())).toString();
        	}
            // 返回数值类型的值(记得将数字类型的值转化为BigDecimal,不然的话,取出来会带有小数点,切记!!!!!)
            return String.valueOf(new BigDecimal(hssfCell.getNumericCellValue()) );
        } else {
            // 返回字符串类型的值
            return String.valueOf(hssfCell.getStringCellValue());
        }
    }

}
UtilTools.java是一个工具类,主要用到了下面两个方法:
/**
	 * swing页面形式的选择文件存储位置
	 * 
	 * @return
	 */
	public static String getDirPath() {
		JFileChooser parseDir = new JFileChooser();
		parseDir.setAcceptAllFileFilterUsed(true);
		parseDir.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		int result = parseDir.showOpenDialog(null);
		if (result == JFileChooser.APPROVE_OPTION) {
			System.out.println(parseDir.getSelectedFile().getAbsolutePath());
			return parseDir.getSelectedFile().getAbsolutePath();
		} else {
			return "";
		}
	}
/**
	 * 获取文件的后缀名
	 * 
	 * @param filePath
	 * @return
	 */
	public static String getFileExtName(String filePath) {

		File f = new File(filePath);
		String fileName = f.getName();
		String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
		System.out.println(prefix);
		return prefix;

	}



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以的,你可以通过POI库操作数据库,将数据导出Excel文件(.xls或.xlsx),然后使用JavaMail发送邮件,附带这个Excel文件作为附件。在SSM框架中,你可以使用Spring的JavaMailSender来发送邮件,同时使用POI库来生成Excel文件。以下是一个简单的示例代码: ```java // 导出数据到Excel文件 public void exportDataToExcel() { // 查询数据库数据并获取结果集 List<Data> dataList = dataService.getDataList(); // 创建Excel工作簿 Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Data"); // 创建表头 Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("ID"); headerRow.createCell(1).setCellValue("Name"); // ... // 填充数据 int rowNum = 1; for (Data data : dataList) { Row row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(data.getId()); row.createCell(1).setCellValue(data.getName()); // ... } // 保存Excel文件 try (FileOutputStream outputStream = new FileOutputStream("data.xls")) { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } } // 发送邮件 public void sendEmailWithAttachment() { // 创建一个JavaMailSender实例 JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); // 配置邮件服务器参数 mailSender.setHost("smtp.example.com"); mailSender.setUsername("your-email@example.com"); mailSender.setPassword("your-password"); // 创建一个MimeMessage实例 MimeMessage message = mailSender.createMimeMessage(); try { // 设置邮件内容 MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo("recipient@example.com"); helper.setSubject("Data Export"); helper.setText("Please find the attached Excel file."); // 添加附件 FileSystemResource file = new FileSystemResource(new File("data.xls")); helper.addAttachment("data.xls", file); // 发送邮件 mailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); } } ``` 你可以根据实际情况修改代码中的数据查询、Excel表头和填充、邮件服务器配置等部分。注意替换示例中的邮件服务器参数和收件人地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值