Excel上传并解析(java)

2 篇文章 0 订阅
1 篇文章 0 订阅

问题:本地测试时,通过本地地址上传文件是可行的,但是当把项目部署到服务器上时,通过这种方式上传本地文件是不行的。
解决:需要先把文件上传到服务器,然后再做其他操作(提取数据,数据转换,存档等)

前端代码(表单上传文件,后面会研究ajax上传文件)

<s:form action="member_extractMembers" method="post" enctype="multipart/form-data">
    <span>选择Excel文件</span>
    <s:file name="upload_excel" accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"></s:file>
    <br>
    <s:submit value="导入"></s:submit>
</s:form>

后端代码(excel文件解析):

    /**
     * 提取Excel中的内容
     * */
    public static List<Member> extract(File file_name){
        //List<Member> members = new ArrayList<>();
        List<Member> members = new ArrayList<>();
        try {
            InputStream is = new FileInputStream(file_name);
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
            //只读取第一个sheet进行处理
            XSSFSheet sheet = xssfWorkbook.getSheetAt(0);

            //处理当前sheet,循环读取每一行
            for(int row_num = 1; row_num < (sheet.getLastRowNum()+1);row_num++){
                //System.out.println(sheet.getLastRowNum());
                XSSFRow xss_row = sheet.getRow(row_num);
                Member member = new Member();
                member.setName(getStringVal(xss_row.getCell(0)));
                member.setPhone(getStringVal(xss_row.getCell(1)));
                member.setCard_name(getStringVal(xss_row.getCell(2)));
                member.setLoose_change(getStringVal(xss_row.getCell(3)));
                members.add(member);
            }
            //}
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return members;
    }

其他代码:

    /**
     * 提取文件中的会员
     * */
    public String extractMembers(){
        List<Member> members = MemberUtil.extract(upload_excel);

        request.setAttribute("add_members", members);
        request.setAttribute("title", "批量添加会员");
        request.setAttribute("navPath", "foreground/nav2/nav.jsp");
        request.setAttribute("contempPath", "foreground/shop/member/addMany.jsp");
        return SUCCESS;
    }

注:upload_excel 与前端input的name一致

如有错误,还请多指教。

Java中实现上传Excel文件并解析,通常会用到Apache POI库,这是一个广泛使用的开源库,专门用于读取和写入Microsoft Office格式的文件。以下是实现这一功能的基本步骤: 1. **上传文件**: 首先,需要使用一个Web框架(如Spring MVC)来处理文件上传的请求。在控制器(Controller)中,可以通过注解`@PostMapping`来定义一个方法来接收上传的文件。使用`MultipartFile`类型的参数来接收上传的文件。 2. **保存文件**: 将上传的文件保存到服务器的文件系统或数据库中,以便后续处理。 3. **解析Excel文件**: 使用Apache POI读取保存的Excel文件。根据文件类型(如`.xls`或`.xlsx`),使用相应的API。对于`.xlsx`文件,通常使用`XSSFWorkbook`;对于`.xls`文件,使用`HSSFWorkbook`。 4. **读取数据**: 创建一个工作簿(Workbook)实例,并用它来获取一个或多个工作表(Sheet)。然后遍历工作表中的行(Row)和单元格(Cell),根据需要读取单元格中的数据。 5. **数据处理**: 解析出来的数据可以进行进一步的处理,例如存入数据库或进行业务逻辑处理。 下面是一个简单的代码示例: ```java import org.apache.poi.ss.usermodel.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; // ... public class ExcelParser { public void parseExcelFile(MultipartFile file) throws IOException { // 创建工作簿实例 Workbook workbook = null; if (file.getContentType().equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) { workbook = new XSSFWorkbook(file.getInputStream()); } else if (file.getContentType().equals("application/vnd.ms-excel")) { workbook = new HSSFWorkbook(file.getInputStream()); } // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 遍历行和单元格 for (Row row : sheet) { for (Cell cell : row) { // 根据单元格的数据类型读取数据 switch (cell.getCellType()) { case STRING: // 处理字符串类型单元格数据 break; case NUMERIC: // 处理数字类型单元格数据 break; // 其他类型的处理... } } } // 关闭工作簿资源 workbook.close(); } } ``` 在使用上述代码之前,确保已经将Apache POI库添加到项目的依赖中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值