乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用java操作Excel文件

       鳳舞天煌 2007-10-10

      1. 必要性

      Excel是一種常見的文檔格式,通常情況下大多數(shù)的客戶都對(duì)使用Excel十分的精通。對(duì)于我們來說,客戶善于使用就可以使我們免于培訓(xùn)的煩惱。而某些系統(tǒng)往往需要錄入相當(dāng)量的數(shù)據(jù),這些數(shù)據(jù)一般以某種特定的格式保存。而Excel正是一種相當(dāng)規(guī)格的數(shù)據(jù)保存方式,至少它是易于格式化的,而且客戶也能夠按照某種特定的格式來將數(shù)據(jù)錄入到Excel文件中去。所以綜上,我們有必要了解如何用純java來讀取Excel文件。

      2. 目的

      我們希望用戶將資料錄入Excel的目的往往只有一個(gè)就是將這些數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中去。數(shù)據(jù)庫往往比較復(fù)雜,而且各種不同的數(shù)據(jù)庫產(chǎn)品之間是不同的,這種區(qū)別無疑的增加了我們導(dǎo)入的困難。從excel文件來說,用戶錄入的數(shù)據(jù)往往并不能直接使用,要經(jīng)過邏輯處理或者出錯(cuò)的判斷,或者默認(rèn)的改正等。如果能夠使用java來直接讀取excel文件,無疑會(huì)使我們能夠較從容的解決這些問題。

      3. 其他的方法

      將數(shù)據(jù)從excel文件中讀出來還有一個(gè)方法,就是使用odbc。然后再用jdbc-odbc橋來將數(shù)據(jù)從excel文件中讀出到j(luò)ava中來,不過這種方法必須配odbc,針對(duì)excle文件配odbc是一件很麻煩的事情,而且難以操控,所以這只能是一種暫時(shí)的解決方法。

      4. POI

      POI是Apache的Jakata項(xiàng)目,POI 代表 Poor Obfuscation Implementation,即不良模糊化實(shí)現(xiàn)。POI 的目標(biāo)就是提供一組 Java API 來使得基于 Microsoft OLE 2 Compound Document 格式的 Microsoft Office 文件易于操作。一些 POI API 僅僅是為最常用的 Microsoft Office 文件 Word 和 Excel 而開發(fā)的;而其他的 API 則是用于通用的 OLE 2 Compound Document 和屬性文件。POI可以到www.下載到。編譯好的jar主要有這樣4個(gè):poi包,poi Browser包,poi hdf包,poi hssf例程包。實(shí)際運(yùn)行時(shí),需要有poi包就可以了。POI 是一個(gè)開放源代碼項(xiàng)目,并且得到了數(shù)百名志愿者的不斷更新??梢栽?http://jakarta./builds/jakarta-poi/ 上獲得源代碼和文檔。通過POI包,我們不僅可以操縱excel文檔,也能夠操控word文檔,以及其他的OLE2格式的文檔。

      5. HSSF

      HSSF 代表 Horrible Spreadsheet Format(可怕的電子表格格式)。API 給程序員提供了極其容易地讀寫或操作 Microsoft Excel 97-2002 文件的能力。這些API都由POI包來提供,實(shí)際使用是我們只需要POI包就可以了。

      6. 操作EXCEL文件

      HSSF提供給用戶使用的對(duì)象在org.apache.poi.hssf.usermodel包中,主要部分包括Excell對(duì)象,樣式和格式,還有輔助操作。有以下幾種對(duì)象:

      HSSFWorkbook excell的文檔對(duì)象

      HSSFSheet excell的表單

      HSSFRow excell的行

      HSSFCell excell的格子單元

      HSSFFont excell字體

      HSSFName 名稱

      HSSFDataFormat 日期格式

      在poi1.7中才有以下2項(xiàng):

      HSSFHeader sheet頭

      HSSFFooter sheet尾

      和這個(gè)樣式

      HSSFCellStyle cell樣式

      輔助操作包括

      HSSFDateUtil 日期

      HSSFPrintSetup 打印

      HSSFErrorConstants 錯(cuò)誤信息表

      我們經(jīng)常能夠使用到的還是讀取EXCEL文件,下面看一個(gè)例子:

      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中幾個(gè)關(guān)鍵對(duì)象的使用。其中HSSFWorkbook代表的是整個(gè)文檔,這個(gè)workbook的概念是excel本身的概念,如果你不清楚,就去查excel的幫助文檔。HSSFSheet代表的是具體的表格,在excel中一份workbook中可能會(huì)有好幾個(gè)表格,這些表格的順序是從0開始的。“HSSFSheet sheet = wb.getSheetAt(0);”這一條語句就是建立表格對(duì)象即Sheet對(duì)象。Sheet對(duì)象建立之后就可以讀Cell了,即表格的內(nèi)容。

      通過POI來讀取EXCEL文件就是這么簡單。

      7. 一個(gè)例子
      這個(gè)例子是基于GUI的,功能是讀入一個(gè)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電子表格內(nèi)容</p>
       * <p>Description: 這個(gè)類的作用是從微軟的電子表格中讀取信息,
       *   目前支持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)
          { //得到一個(gè)sheet對(duì)象。

              HSSFWorkbook wb = null;
              POIFSFileSystem xlsf = null;
              try
              {
                  xlsf = new POIFSFileSystem(new FileInputStream(f));
                  wb = new HSSFWorkbook(xlsf);
              }
              catch (IOException ex)
              {
                  System.err.println("錯(cuò)誤:文件流輸入有誤。");
                  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;//它是從零開始計(jì)算的。
              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, "文件已經(jīng)保存,按確定鍵退出!",
                      "結(jié)束!", 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. 結(jié)束
      以上的對(duì)于POI的介紹只是很簡單的引導(dǎo)大家入個(gè)門,如果大家感興趣地話,可以自己參考POI的文檔。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多