使用java操作Excel文件

Java 使用 POI 对 Excel文件 进行读写操作 Java 使用 POI 对 Excel文件进行读写操作 一、背景 目前正在做一个问卷功能模块,收集完问卷信息后,需要将数据库中的数据导出到Excel数据表中进行留存,因此就学习了在Java中如何对Excel表进行读写操作。经过了解后选择了 POI 技... 阅读详情

 

1. 必要性

Excel是一种常见的文档格式,通常情况下大多数的客户都对使用Excel十分的精通。对于我们来说,客户善于使用就可以使我们免于培训的烦恼。而某些系统往往需要录入相当量的数据,这些数据一般以某种特定的格式保存。而Excel正是一种相当规格的数据保存方式,至少它是易于格式化的,而且客户也能够按照某种特定的格式来将数据录入到Excel文件中去。所以综上,我们有必要了解如何用纯java来读取Excel文件。

2. 目的

我们希望用户将资料录入Excel的目的往往只有一个就是将这些数据导入到数据库中去。数据库往往比较复杂,而且各种不同的数据库产品之间是不同的,这种区别无疑的增加了我们导入的困难。从excel文件来说,用户录入的数据往往并不能直接使用,要经过逻辑处理或者出错的判断,或者默认的改正等。如果能够使用java来直接读取excel文件,无疑会使我们能够较从容的解决这些问题。

3. 其他的方法

将数据从excel文件中读出来还有一个方法,就是使用odbc。然后再用jdbc-odbc桥来将数据从excel文件中读出到java中来,不过这种方法必须配odbc,针对excle文件配odbc是一件很麻烦的事情,而且难以操控,所以这只能是一种暂时的解决方法。

4. POI

POI是Apache的Jakata项目,POI 代表 Poor Obfuscation Implementation,即不良模糊化实现。POI 的目标就是提供一组 Java API 来使得基于 Microsoft OLE 2 Compound Document 格式的 Microsoft Office 文件易于操作。一些 POI API 仅仅是为最常用的 Microsoft Office 文件 Word 和 Excel 而开发的;而其他的 API 则是用于通用的 OLE 2 Compound Document 和属性文件。POI可以到www.apache.org下载到。编译好的jar主要有这样4个:poi包,poi Browser包,poi hdf包,poi hssf例程包。实际运行时,需要有poi包就可以了。POI 是一个开放源代码项目,并且得到了数百名志愿者的不断更新。可以在 http://jakarta.apache.org/builds/jakarta-poi/ 上获得源代码和文档。通过POI包,我们不仅可以操纵excel文档,也能够操控word文档,以及其他的OLE2格式的文档。

5. HSSF

HSSF 代表 Horrible Spreadsheet Format(可怕的电子表格格式)。API 给程序员提供了极其容易地读写或操作 Microsoft Excel 97-2002 文件的能力。这些API都由POI包来提供,实际使用是我们只需要POI包就可以了。

6. 操作EXCEL文件

HSSF提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excell对象,样式和格式,还有辅助操作。有以下几种对象:

HSSFWorkbook excell的文档对象

HSSFSheet excell的表单

HSSFRow excell的行

HSSFCell excell的格子单元

HSSFFont excell字体

HSSFName 名称

HSSFDataFormat 日期格式

在poi1.7中才有以下2项:

HSSFHeader sheet头

HSSFFooter sheet尾

和这个样式

HSSFCellStyle cell样式

辅助操作包括

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

我们经常能够使用到的还是读取EXCEL文件,下面看一个例子:

POIFSFileSystem fs  = new POIFSFileSystem(new FileInputStream("workbook.xls"));
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);
    HSSFRow row = sheet.getRow(2);
    HSSFCell cell = row.getCell((short)3);
if (cell == null)
{
        cell = row.createCell((short)3);
}
    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    cell.setCellValue("a test"); // Write the output to a file
    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    wb.write(fileOut);
fileOut.close();

这是基本的读写方法,其中我们注意到HSSF中几个关键对象的使用。其中HSSFWorkbook代表的是整个文档,这个workbook的概念是excel本身的概念,如果你不清楚,就去查excel的帮助文档。HSSFSheet代表的是具体的表格,在excel中一份workbook中可能会有好几个表格,这些表格的顺序是从0开始的。“HSSFSheet sheet = wb.getSheetAt(0);”这一条语句就是建立表格对象即Sheet对象。Sheet对象建立之后就可以读Cell了,即表格的内容。

通过POI来读取EXCEL文件就是这么简单。

7. 一个例子
这个例子是基于GUI的,功能是读入一个excel文件并输出成html或者文本文件(需要你自己选择)。并能够生成insert语句。要使用POI包。
package testxls;

import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.*;

/**
 * <p>Title: 取得xls电子表格内容</p>
 * <p>Description: 这个类的作用是从微软的电子表格中读取信息,
 *   目前支持Excel97,Excel2000。使用apache的poi包。</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * jakelong@163.com
 * @version 1.0
 */
public class testxls
{
    File testfile = null;
    private HSSFSheet sheet;
    String Field = "";
    String tbName="";

//--------------------------------------------------------
    public testxls()
    {
    }

//-------------------------------------------
    public File filechooer()
    { //文件选择器

        JFileChooser chooser = new JFileChooser();

         XlsFileFiliter filter1 = new XlsFileFiliter();

        chooser.addChoosableFileFilter(filter1);
        chooser.setAcceptAllFileFilterUsed(false);
        int result = chooser.showOpenDialog(chooser);
        testfile = chooser.getSelectedFile();
        if (result == chooser.CANCEL_OPTION)
            System.exit(0);
        return testfile;
    }

//---------------------------------------------------
    public HSSFSheet getSheet(File f)
    { //得到一个sheet对象。

        HSSFWorkbook wb = null;
        POIFSFileSystem xlsf = null;
        try
        {
            xlsf = new POIFSFileSystem(new FileInputStream(f));
            wb = new HSSFWorkbook(xlsf);
        }
        catch (IOException ex)
        {
            System.err.println("错误:文件流输入有误。");
            ex.printStackTrace();
        }
        HSSFSheet sheet = wb.getSheetAt(0);
        return sheet;
    }

//-----------------------------------
    public String[][] outresult()
    {
        int length[] = outresultlength();
        String result[][] = new String[length[0]][length[1]];

        int lastrow = sheet.getLastRowNum()+1;
        for (int i = 0; i < lastrow; i++)
        {
            HSSFRow row = sheet.getRow(i);
            int lastcell = row.getLastCellNum();
            for (int j = 0; j < lastcell; j++)
            {
                HSSFCell cell = row.getCell( (short) j);
                if (cell == null)
                    result[i][j] = "blank";
                else
                {
                    switch (cell.getCellType())
                    {
                        case 1:
                            result[i][j] = cell.getStringCellValue();
                            break;
                        case 0:
                            result[i][j] = cell.getNumericCellValue() + "";
                            break;
                        case HSSFCell.CELL_TYPE_FORMULA:
                             result[i][j] = cell.getCellFormula()+"";
                             break;
                        case 3:
                            result[i][j] = "blank";
                            break;
                        default:
                            result[i][j] = "blank";
                            break;
                    }
                }
            }
        }
        for (int i = 0; i < result.length; i++)
        {
            for (int j = 0; j < result[i].length; j++)
            {
                if (result[i][j] == null)
                {
                    result[i][j] = "blank";
                }
            }
        }
        return result;
    }

//--------------------------------------------------------------------------------
    public int[] outresultlength()
    {

        int lastrow = sheet.getLastRowNum()+1;//它是从零开始计算的。
        HSSFRow row = sheet.getRow(0);
        int lastcell = row.getLastCellNum();
        int a[] =
            {
            lastrow, lastcell};
        return a;
    }
//----------------------------------------------------------------------
    public void printRs(String[][] rs)
    {
        for (int i = 0; i < rs.length; i++)
        {
            for (int j = 0; j < rs[i].length; j++)
            {
                System.out.print("(" + i + "," + j + ") " + rs[i][j] + " ");
            }
            System.out.println(" ");
        }
    }

//-----------------------------------------------------------
    public void outputXlsContent(String[][] xls)
    {
        String[][] content = xls;

        JFileChooser chooser = new JFileChooser();

        int result = chooser.showSaveDialog(chooser);
        File testfile1 = chooser.getSelectedFile();
        if (result == chooser.CANCEL_OPTION)
        {
            System.exit(0);
        }
        try
        {
            DataOutputStream out = new DataOutputStream(new FileOutputStream(
                testfile1));

            String fileName = testfile.getName();
            String sql1 = fileName + "/n <table border=/"1/"> ";
            for (int i = 0; i < content.length; i++)
            {
                sql1 = sql1 + " <tr> ";
                for (int j = 0; j < content[i].length; j++)
                {
                    sql1 = sql1 + " <td> " + content[i][j] + " </td> ";
                }
                sql1 = sql1 + " </tr> ";
            }
            sql1 = sql1 + " </table> ";
            byte[] b = sql1.getBytes("gbk");
            out.write(b);
            out.close();
            javax.swing.JOptionPane.showMessageDialog(null, "文件已经保存,按确定键退出!",
                "结束!", javax.swing.JOptionPane.INFORMATION_MESSAGE);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
  //-----------------------------------------------------------
    public void outputXlsContent(String xls)
    {
      JFileChooser chooser = new JFileChooser();

       int result = chooser.showSaveDialog(chooser);
       File testfile1 = chooser.getSelectedFile();
       if (result == chooser.CANCEL_OPTION)
       {
           System.exit(0);
       }
      try
      {
        DataOutputStream out = new DataOutputStream(new FileOutputStream(
            testfile1));

        String fileName = testfile.getName();
        byte[] b = xls.getBytes("gbk");
        out.write(b);
        out.close();
      }
      catch (Exception ex)
      {
        ex.printStackTrace();
      }
    }
  //-----------------------------------------------------------

    public String generateinsertsql(String[][] content)
    {

      String fieldContent="";
      int ilength=0;

      String sql="";
      for (int i = 1; i < content.length; i++)
      {
        fieldContent="'"+content[i][0]+"'";
        for(int j=1;j<content[i].length;j++)
        {
          fieldContent=fieldContent+",'"+content[i][j]+"'";
        }
         sql=sql+"insert"+tbName+"("+Field+") values("+fieldContent+")/r/n";
         ilength++;
      }
      System.out.print(sql);
      System.out.println("lenth of i:"+ilength);
      return sql;

    }

//-----------------------------------------------------------
    public static void main(String[] args)
    {
        testxls testxls1 = new testxls();
        testxls1.filechooer();
        //testxls1.sheet= testxls1.getSheet(testxls1.filechooer());
        //testxls1.generateinsertsql(testxls1.outresult());
        //testxls1.outputXlsContent(testxls1.generateinsertsql(testxls1.outresult()));
       // System.exit(0);
    }
}

文件过滤器类:
package testxls;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author ClarkHillm@hotmailcom
 * @version 1.0
 */

import java.io.*;
import javax.swing.filechooser.FileFilter;

public class XlsFileFiliter
    extends javax.swing.filechooser.FileFilter
{
  public String getFilePostfix(String FileName)//截取文件后缀。
  {
    return FileName.substring(FileName.lastIndexOf(".")+1);
  }
//--------------------------------------------------
  public String getDescription()
  {
      return "电子表格文档";
  }

//--------------------------------------------------
  public boolean accept(File f)
  {
    String extension = "xls";
    if (f.isDirectory())
    {
      return true;
    }
    String name = f.getName();
    if (getFilePostfix(name).equals(extension))
    {
      return true;
    }
    else
    {
      return false;
    }
  }
}
8. 结束
以上的对于POI的介绍只是很简单的引导大家入个门,如果大家感兴趣地话,可以自己参考POI的文档。

java使用poi操作读取Excel文件 阅读详情

相关推荐

Java与Excel的交互:使用jxl库解析和操作Excel文件

本文还有配套的精品资源,点击获取 简介:在Java中处理Excel文件对于数据处理场景至关重要。本文将介绍如何使用jxl库来读取、写入和操作Excel文件。通过示例代码和详细步骤,包括添加jxl依赖、读取Excel内容、写入数据到Excel以及运用jxl库提供的其他功能,如样式设置和单元格合并等。jxl库提供了对多种Excel格式的支持,并通过API文档可以帮助进一步深入使...

weixin_35734408的博客 2353

文件的过滤(FileFilter)

import java.io.File; import java.io.FileFilter; import java.io.IOException; public class FilterDemo { public static void main(String args[]) throws IOException{ File f = new File("D:

摩西YF拉比 420

Java程序中使用jxl库操作Excel文件指南

jxl库(Java Excel API)是一个开源的Java库,它允许开发者通过纯Java代码来读取、创建和修改Excel文件。它支持大多数Excel 97-2003文件的格式,并对更现代的Excel文件格式有一定的支持。jxl被广泛用于Java应用程序中,需要进行Excel文件处理的场景,如数据导入导出、报表生成等。

weixin_42327217的博客 935

Java读取、写入、处理Excel文件中的数据

在日常工作中,我们常常会进行文件读写操作,除去我们最常用的纯文本文件读写,更多时候我们需要对Excel中的数据进行读取操作,本文将介绍Excel读写的常用方法,希望对大家学习Java读写Excel会有帮助。        在开始进行Java读写Excel前,我们需要先下一个jxl的jar包,这个jar包中提供了相关读写Excel的方法,在百度里所搜一下jxl.jar下载就会出现很多下载地址了

秋水の歌的专栏 3万+

深入探索Java中使用JXL库操作Excel文件

处理财务数据时,对小数点的精确控制是必不可少的。JXL库提供了对小数点格式预定义和自定义的能力,允许开发者按照业务需求来格式化数据。JXL库预定义了多种小数点格式,可以直接应用。例如,我们可以使用类来定义小数点后保留两位数的格式:以上代码创建了一个新的单元格格式,小数点后将保留两位数。如果预定义的格式无法满足需求,我们可以自定义格式。比如,在处理货币时,可能需要添加货币符号并设置特定的小数位数:然后,可以将这个自定义格式应用到对象中。

weixin_30820933的博客 1108

PCB光绘文件DFM检查:从Gerber验证到制造闭环

Gerber文件是PCB设计交付制造的核心数据载体,其准确性直接决定硬件可制造性与量产良率。理解Gerber格式规范、IPC网表比对原理及DFM(Design for Manufacturability)自动检测逻辑,是电子工程师保障设计落地的关键能力。通过电气连通性验证、物理DRC规则扫描与工艺兼容性分析,DFM工具能提前识别开路、短路、孔环不足、阻焊异常等典型问题,避免投板后返工甚至批量报废。在国产化替代趋势下,华秋DFM等平台已深度适配Altium Designer工作流,支持一键导入、智能报告与协同

weixin_42620563的博客 507

Java 操作excel

Java读写excel的两种方式   (1)apache poi   (2)alibaba easyexcel   两种方式写入excel的区别;   poi会先把所有的数据读入到内存中,然后写入到excel中;easyexcel则是把数据一条一条写入excel中。所以如果有大量数据时,比如有100w条数据写入excel中,使用poi会先把数据读入内存中,可能会造成内存溢出;而easyexcel则把数据一条一条写入excel中。* ** POI操作excel ** 依赖 <dependency&gt

weixin_43232592的博客 1496

Mathematica 训练课(12)常用注释方法

Mathematica从入门到进阶

qq_25018077的博客 9075

使用Java操作excel的几种方法

在平时的业务系统开发中,少不了需要用到导出、导入excel功能,今天我们就一起来总结一下! 下面给大家介绍一下几种常用方法: 1、apache poi 2、easypoi 3、easyexcel

Daniel 1万+

西门子S7-1200PLC与FANUC机器人进行PROFINET IO通信的具体方法和步骤详解

西门子S7-1200PLC与FANUC机器人进行PROFINET IO通信的具体方法和步骤详解

Robot_PLC_HMI_Automation 1万+

咨询进阶——解读40页公司战略解码方法【附全文阅读】

战略解码是将企业战略转化为可执行计划的关键过程,强调垂直和水平一致性原则。通过KPI指标设计和目标分解,确保战略在各部门和岗位有效落地。解码过程包括战略澄清、目标牵引、绩效分解和承诺签订,输出战略解码图等文件。不同部门根据责任定位(如利润中心、绩效中心)采用差异化考核方式,实现战略有效执行。

cdfunlove的博客 149

HSSFWorkbook 和使用Java Excel操作Excel文件

Java中导入、导出Excel 一、介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是:我们已经习惯用Excel打印。这样在我们实际的开发中,很多时候需要实现导入、导出Excel的应用。 目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和JavaExcel 下...

AI菜鸡,NLP领域,至今为发不出论文掉头发 1426

Xilinx FPGA平台GTX简易使用教程(四)GTX IP核配置教程

干货来了,GTX IP核配置,搬砖全靠它~~

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

java使用poi操作excel文件_Java使用POI操作Excel文件

/*** description:读取xlsx文件指定的若干列单元格数据* args:指定的若干列的序号(列可以任意个)*/@SuppressWarnings({"resource", "unused"})public ArrayList> xlsx_reader(String excel_url,int ... args) throwsIOException {ArrayList> ...

weixin_42299018的博客 107

ARM功耗管理软件之DVFS&AVS

思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS?

AI-安全-功耗 1230

UG NX二次开发(C#)-建模-获取圆柱面信息(轴向、半径、深度)

获取圆柱面的信息前言一、在UG NX中面的类型有哪些?二、获取圆柱面信息的函数1.获取半径和轴向2、计算圆柱面的深度值3、测试用例总结 文章目录前言一、在UG NX中面的类型有哪些?二、获取圆柱面信息的函数1.获取半径和轴向2、计算圆柱面的深度值3、测试用例总结 前言 在一个项目中,需要遍历曲面,获得所有的圆柱面和圆柱面的信息,包括轴向、半径和圆柱面的深度。经过研究,采用uFModl.AskFaceData(face.Tag, out faceTypeInt, point, dir, box, out

GimiGimmy 4145

java—使用POI操作excel文件操作Excel读取案例

做苍穹外卖操作excel提前用的一个小案例

新人小白,请多指教 283

手把手教你RK3568 MIPI屏驱动适配,纯干货!

RK3568 作为一款高性能的多媒体处理器,在嵌入式领域中备受瞩目。它采用了先进的 22nm 制程工艺,搭载四核 Cortex-A55 处理器,这种架构为芯片提供了高效的功耗比,使其在运行各种复杂任务时,既能保证性能,又能有效控制功耗。在实际应用中,无论是多任务处理还是运行大型应用程序,RK3568 都能凭借其四核 Cortex-A55 处理器,实现流畅的操作体验,满足智能设备对高性能和低功耗的需求。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4069

一小时教你轻松学会使用Java 整合 Easy Excel 操作 Excel 文件

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。HSSF:提供读写Microsoft Excel格式文档的功能。XSSF:提供读写Microsoft Excel OOXML格式文档的功能。HWPF:提供读写Microsoft word格式文档的功能。

我这么骄傲的一个人。 2101

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java使用poi操作excel文件_使用 java apache poi 操作 excel xlsx 文件

工作中临时需要对各种订单量进行简单的统计分析,为了方便简单学习了apache poi 对 xlsx 文件的基本操作,简单记录1. 引包org.apache.poipoi-ooxml4.1.22. 创建文件public static void main(String[] args) {// 创建文件,创建工作薄File xlsFile = new File("C:/demo/demo.xlsx");...

weixin_29196891的博客 433

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java poi_java使用POI操作excel文件

一、POI的定义JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel。而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel。POI全称 Poor Obfuscation Implementation,直译为“可怜的模糊实现”,利用POI接口...

weixin_35118333的博客 484

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java使用jxl操作Excel文件

记录一下平时的开发中使用Java操作Excel文件的方法,包括读取Excel文件和写Excel文件,这里用到了jxl.jar包,下面上代码: /**获取表头的格式*/ public static WritableCellFormat getWritableHeaderCellFormat(){ WritableFont font = new WritableFont(WritableFon

记录技术,记录生活 1107

Java使用POI操作Excel文件

1、简介   Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能。 2、依赖的jar包 <!-- excel 工具类 --> <dependencies> <dependency> <...

weixin_30551963的博客 62

Java使用Apache POI操作excel文件

官方介绍   HSSF is the POI Project's pureJavaimplementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) ...

weixin_34185512的博客 109

java使用poi操作excel文件_java使用poi读取ppt文件和poi读取excel、word示例

Apache的POI项目可以用来处理MS Office文档,codeplex上还有一个它的.net版本。POI项目可创建和维护操作各种基于OOXML和OLE2文件格式的Java API。大多数MS Office都是OLE2格式的。POI通HSMF子项目来支持Outlook,通过HDGF子项目来支持Visio,通过HPBF子项目来支持Publisher。使用POI抽取Word简单示例:要引入poi-...

weixin_42509686的博客 435
上一篇: 关于黄易
下一篇: 2006年1月19日
jakelong
博客等级 码龄24年 9粉丝 26原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值