`
thinkerAndThinker
  • 浏览: 284642 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

大数据量的excel文件读取——excel2007(含代码及示例)

阅读更多

excel2007文件格式与之前版本不同,之前版本采用的是微软自己的存储格式。07版内容的存储采用XML格式,所以,理所当然的,对大数据量的 xlsx文件的读取采用的也是XML的处理方式SAX。

    同之前的版本一样,大数据量文件的读取采用的是事件模型eventusermodel。usermodel模式需要将文件一次性全部读到内存中,07版的既然采用的存储模式是xml,解析用的DOM方式也是如此,这种模式操作简单,容易上手,但是对于大量数据占用的内存也是相当可观,在Eclipse中经常出现内存溢出。

    下面就是采用eventusermodel对07excel文件读取。

    同上篇,我将当前行的单元格数据存储到List中,抽象出 optRows 方法,该方法会在每行末尾时调用,方法参数为当前行索引curRow(int型)及存有行内单元格数据的List。继承类只需实现该行级方法即可。

 

    经测试,对12万条数据,7M大小的文件也能正常运行。无需设置vm的内存空间。

 

    excel读取采用的API为POI3.6,使用前先下载此包,若运行中出现其他依赖包不存在,请下载相应依赖包。

 

抽象类:XxlsAbstract ,作用:遍历excel文件,提供行级操作方法 optRows

Java代码 复制代码
  1. package com.gaosheng.util.xls;   
  2.   
  3. import java.io.InputStream;   
  4. import java.sql.SQLException;   
  5. import java.util.ArrayList;   
  6. import java.util.Iterator;   
  7. import java.util.List;   
  8.   
  9. import org.apache.poi.xssf.eventusermodel.XSSFReader;   
  10. import org.apache.poi.xssf.model.SharedStringsTable;   
  11. import org.apache.poi.xssf.usermodel.XSSFRichTextString;   
  12. import org.apache.poi.openxml4j.opc.OPCPackage;   
  13. import org.xml.sax.Attributes;   
  14. import org.xml.sax.InputSource;   
  15. import org.xml.sax.SAXException;   
  16. import org.xml.sax.XMLReader;   
  17. import org.xml.sax.helpers.DefaultHandler;   
  18. import org.xml.sax.helpers.XMLReaderFactory;   
  19.   
  20. /**  
  21.  * XSSF and SAX (Event API)  
  22.  */  
  23. public abstract class XxlsAbstract extends DefaultHandler {   
  24.     private SharedStringsTable sst;   
  25.     private String lastContents;   
  26.     private boolean nextIsString;   
  27.   
  28.     private int sheetIndex = -1;   
  29.     private List<String> rowlist = new ArrayList<String>();   
  30.     private int curRow = 0;   
  31.     private int curCol = 0;   
  32.   
  33.     //excel记录行操作方法,以行索引和行元素列表为参数,对一行元素进行操作,元素为String类型   
  34. //  public abstract void optRows(int curRow, List<String> rowlist) throws SQLException ;   
  35.        
  36.     //excel记录行操作方法,以sheet索引,行索引和行元素列表为参数,对sheet的一行元素进行操作,元素为String类型   
  37.     public abstract void optRows(int sheetIndex,int curRow, List<String> rowlist) throws SQLException;   
  38.        
  39.     //只遍历一个sheet,其中sheetId为要遍历的sheet索引,从1开始,1-3   
  40.     public void processOneSheet(String filename,int sheetId) throws Exception {   
  41.         OPCPackage pkg = OPCPackage.open(filename);   
  42.         XSSFReader r = new XSSFReader(pkg);   
  43.         SharedStringsTable sst = r.getSharedStringsTable();   
  44.            
  45.         XMLReader parser = fetchSheetParser(sst);   
  46.   
  47.         // rId2 found by processing the Workbook   
  48.         // 根据 rId# 或 rSheet# 查找sheet   
  49.         InputStream sheet2 = r.getSheet("rId"+sheetId);   
  50.         sheetIndex++;   
  51.         InputSource sheetSource = new InputSource(sheet2);   
  52.         parser.parse(sheetSource);   
  53.         sheet2.close();   
  54.     }   
  55.   
  56.     /**  
  57.      * 遍历 excel 文件  
  58.      */  
  59.     public void process(String filename) throws Exception {   
  60.         OPCPackage pkg = OPCPackage.open(filename);   
  61.         XSSFReader r = new XSSFReader(pkg);   
  62.         SharedStringsTable sst = r.getSharedStringsTable();   
  63.   
  64.         XMLReader parser = fetchSheetParser(sst);   
  65.   
  66.         Iterator<InputStream> sheets = r.getSheetsData();   
  67.         while (sheets.hasNext()) {   
  68.             curRow = 0;   
  69.             sheetIndex++;   
  70.             InputStream sheet = sheets.next();   
  71.             InputSource sheetSource = new InputSource(sheet);   
  72.             parser.parse(sheetSource);   
  73.             sheet.close();   
  74.         }   
  75.     }   
  76.   
  77.     public XMLReader fetchSheetParser(SharedStringsTable sst)   
  78.             throws SAXException {   
  79.         XMLReader parser = XMLReaderFactory   
  80.                 .createXMLReader("org.apache.xerces.parsers.SAXParser");   
  81.         this.sst = sst;   
  82.         parser.setContentHandler(this);   
  83.         return parser;   
  84.     }   
  85.   
  86.     public void startElement(String uri, String localName, String name,   
  87.             Attributes attributes) throws SAXException {   
  88.         // c => 单元格   
  89.         if (name.equals("c")) {   
  90.             // 如果下一个元素是 SST 的索引,则将nextIsString标记为true   
  91.             String cellType = attributes.getValue("t");   
  92.             if (cellType != null && cellType.equals("s")) {   
  93.                 nextIsString = true;   
  94.             } else {   
  95.                 nextIsString = false;   
  96.             }   
  97.         }   
  98.         // 置空   
  99.         lastContents = "";   
  100.     }   
  101.   
  102.     public void endElement(String uri, String localName, String name)   
  103.             throws SAXException {   
  104.         // 根据SST的索引值的到单元格的真正要存储的字符串   
  105.         // 这时characters()方法可能会被调用多次   
  106.         if (nextIsString) {   
  107.             try {   
  108.                 int idx = Integer.parseInt(lastContents);   
  109.                 lastContents = new XSSFRichTextString(sst.getEntryAt(idx))   
  110.                         .toString();   
  111.             } catch (Exception e) {   
  112.   
  113.             }   
  114.         }   
  115.   
  116.         // v => 单元格的值,如果单元格是字符串则v标签的值为该字符串在SST中的索引   
  117.         // 将单元格内容加入rowlist中,在这之前先去掉字符串前后的空白符   
  118.         if (name.equals("v")) {   
  119.             String value = lastContents.trim();   
  120.             value = value.equals("")?" ":value;   
  121.             rowlist.add(curCol, value);   
  122.             curCol++;   
  123.         }else {   
  124.             //如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法   
  125.             if (name.equals("row")) {   
  126.                 try {   
  127.                     optRows(sheetIndex,curRow,rowlist);   
  128.                 } catch (SQLException e) {   
  129.                     e.printStackTrace();   
  130.                 }   
  131.                 rowlist.clear();   
  132.                 curRow++;   
  133.                 curCol = 0;   
  134.             }   
  135.         }   
  136.     }   
  137.   
  138.     public void characters(char[] ch, int start, int length)   
  139.             throws SAXException {   
  140.         //得到单元格内容的值   
  141.         lastContents += new String(ch, start, length);   
  142.     }   
  143. }  
Java代码  收藏代码
  1. package com.gaosheng.util.xls;  
  2.   
  3. import java.io.InputStream;  
  4. import java.sql.SQLException;  
  5. import java.util.ArrayList;  
  6. import java.util.Iterator;  
  7. import java.util.List;  
  8.   
  9. import org.apache.poi.xssf.eventusermodel.XSSFReader;  
  10. import org.apache.poi.xssf.model.SharedStringsTable;  
  11. import org.apache.poi.xssf.usermodel.XSSFRichTextString;  
  12. import org.apache.poi.openxml4j.opc.OPCPackage;  
  13. import org.xml.sax.Attributes;  
  14. import org.xml.sax.InputSource;  
  15. import org.xml.sax.SAXException;  
  16. import org.xml.sax.XMLReader;  
  17. import org.xml.sax.helpers.DefaultHandler;  
  18. import org.xml.sax.helpers.XMLReaderFactory;  
  19.   
  20. /** 
  21.  * XSSF and SAX (Event API) 
  22.  */  
  23. public abstract class XxlsAbstract extends DefaultHandler {  
  24.     private SharedStringsTable sst;  
  25.     private String lastContents;  
  26.     private boolean nextIsString;  
  27.   
  28.     private int sheetIndex = -1;  
  29.     private List<String> rowlist = new ArrayList<String>();  
  30.     private int curRow = 0;  
  31.     private int curCol = 0;  
  32.   
  33.     //excel记录行操作方法,以行索引和行元素列表为参数,对一行元素进行操作,元素为String类型  
  34. //  public abstract void optRows(int curRow, List<String> rowlist) throws SQLException ;  
  35.       
  36.     //excel记录行操作方法,以sheet索引,行索引和行元素列表为参数,对sheet的一行元素进行操作,元素为String类型  
  37.     public abstract void optRows(int sheetIndex,int curRow, List<String> rowlist) throws SQLException;  
  38.       
  39.     //只遍历一个sheet,其中sheetId为要遍历的sheet索引,从1开始,1-3  
  40.     public void processOneSheet(String filename,int sheetId) throws Exception {  
  41.         OPCPackage pkg = OPCPackage.open(filename);  
  42.         XSSFReader r = new XSSFReader(pkg);  
  43.         SharedStringsTable sst = r.getSharedStringsTable();  
  44.           
  45.         XMLReader parser = fetchSheetParser(sst);  
  46.   
  47.         // rId2 found by processing the Workbook  
  48.         // 根据 rId# 或 rSheet# 查找sheet  
  49.         InputStream sheet2 = r.getSheet("rId"+sheetId);  
  50.         sheetIndex++;  
  51.         InputSource sheetSource = new InputSource(sheet2);  
  52.         parser.parse(sheetSource);  
  53.         sheet2.close();  
  54.     }  
  55.   
  56.     /** 
  57.      * 遍历 excel 文件 
  58.      */  
  59.     public void process(String filename) throws Exception {  
  60.         OPCPackage pkg = OPCPackage.open(filename);  
  61.         XSSFReader r = new XSSFReader(pkg);  
  62.         SharedStringsTable sst = r.getSharedStringsTable();  
  63.   
  64.         XMLReader parser = fetchSheetParser(sst);  
  65.   
  66.         Iterator<InputStream> sheets = r.getSheetsData();  
  67.         while (sheets.hasNext()) {  
  68.             curRow = 0;  
  69.             sheetIndex++;  
  70.             InputStream sheet = sheets.next();  
  71.             InputSource sheetSource = new InputSource(sheet);  
  72.             parser.parse(sheetSource);  
  73.             sheet.close();  
  74.         }  
  75.     }  
  76.   
  77.     public XMLReader fetchSheetParser(SharedStringsTable sst)  
  78.             throws SAXException {  
  79.         XMLReader parser = XMLReaderFactory  
  80.                 .createXMLReader("org.apache.xerces.parsers.SAXParser");  
  81.         this.sst = sst;  
  82.         parser.setContentHandler(this);  
  83.         return parser;  
  84.     }  
  85.   
  86.     public void startElement(String uri, String localName, String name,  
  87.             Attributes attributes) throws SAXException {  
  88.         // c => 单元格  
  89.         if (name.equals("c")) {  
  90.             // 如果下一个元素是 SST 的索引,则将nextIsString标记为true  
  91.             String cellType = attributes.getValue("t");  
  92.             if (cellType != null && cellType.equals("s")) {  
  93.                 nextIsString = true;  
  94.             } else {  
  95.                 nextIsString = false;  
  96.             }  
  97.         }  
  98.         // 置空  
  99.         lastContents = "";  
  100.     }  
  101.   
  102.     public void endElement(String uri, String localName, String name)  
  103.             throws SAXException {  
  104.         // 根据SST的索引值的到单元格的真正要存储的字符串  
  105.         // 这时characters()方法可能会被调用多次  
  106.         if (nextIsString) {  
  107.             try {  
  108.                 int idx = Integer.parseInt(lastContents);  
  109.                 lastContents = new XSSFRichTextString(sst.getEntryAt(idx))  
  110.                         .toString();  
  111.             } catch (Exception e) {  
  112.   
  113.             }  
  114.         }  
  115.   
  116.         // v => 单元格的值,如果单元格是字符串则v标签的值为该字符串在SST中的索引  
  117.         // 将单元格内容加入rowlist中,在这之前先去掉字符串前后的空白符  
  118.         if (name.equals("v")) {  
  119.             String value = lastContents.trim();  
  120.             value = value.equals("")?" ":value;  
  121.             rowlist.add(curCol, value);  
  122.             curCol++;  
  123.         }else {  
  124.             //如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法  
  125.             if (name.equals("row")) {  
  126.                 try {  
  127.                     optRows(sheetIndex,curRow,rowlist);  
  128.                 } catch (SQLException e) {  
  129.                     e.printStackTrace();  
  130.                 }  
  131.                 rowlist.clear();  
  132.                 curRow++;  
  133.                 curCol = 0;  
  134.             }  
  135.         }  
  136.     }  
  137.   
  138.     public void characters(char[] ch, int start, int length)  
  139.             throws SAXException {  
  140.         //得到单元格内容的值  
  141.         lastContents += new String(ch, start, length);  
  142.     }  
  143. }  

 

继承类:XxlsBig,作用:将数据转出到数据库临时表

Java代码 复制代码
  1. package com.gaosheng.util.examples.xls;   
  2.   
  3. import java.io.FileInputStream;   
  4. import java.io.IOException;   
  5. import java.sql.Connection;   
  6. import java.sql.DriverManager;   
  7. import java.sql.PreparedStatement;   
  8. import java.sql.SQLException;   
  9. import java.sql.Statement;   
  10. import java.util.List;   
  11. import java.util.Properties;   
  12.   
  13. import com.gaosheng.util.xls.XxlsAbstract;   
  14.   
  15. public class XxlsBig extends XxlsAbstract {   
  16.     public static void main(String[] args) throws Exception {   
  17.         XxlsBig howto = new XxlsBig("temp_table");   
  18.         howto.processOneSheet("F:/new.xlsx",1);   
  19.         howto.process("F:/new.xlsx");   
  20.         howto.close();   
  21.     }   
  22.        
  23.     public XxlsBig(String tableName) throws SQLException{   
  24.         this.conn = getNew_Conn();   
  25.         this.statement = conn.createStatement();   
  26.         this.tableName = tableName;   
  27.     }   
  28.   
  29.     private Connection conn = null;   
  30.     private Statement statement = null;   
  31.     private PreparedStatement newStatement = null;   
  32.   
  33.     private String tableName = "temp_table";   
  34.     private boolean create = true;   
  35.        
  36.     public void optRows(int sheetIndex,int curRow, List<String> rowlist) throws SQLException {   
  37.         if (sheetIndex == 0 && curRow == 0) {   
  38.             StringBuffer preSql = new StringBuffer("insert into " + tableName   
  39.                     + " values(");   
  40.             StringBuffer table = new StringBuffer("create table " + tableName   
  41.                     + "(");   
  42.             int c = rowlist.size();   
  43.             for (int i = 0; i < c; i++) {   
  44.                 preSql.append("?,");   
  45.                 table.append(rowlist.get(i));   
  46.                 table.append("  varchar2(100) ,");   
  47.             }   
  48.   
  49.             table.deleteCharAt(table.length() - 1);   
  50.             preSql.deleteCharAt(preSql.length() - 1);   
  51.             table.append(")");   
  52.             preSql.append(")");   
  53.             if (create) {   
  54.                 statement = conn.createStatement();   
  55.                 try{   
  56.                     statement.execute("drop table "+tableName);   
  57.                 }catch(Exception e){   
  58.                        
  59.                 }finally{   
  60.                     System.out.println("表 "+tableName+" 删除成功");   
  61.                 }   
  62.                 if (!statement.execute(table.toString())) {   
  63.                     System.out.println("创建表 "+tableName+" 成功");   
  64.                     // return;   
  65.                 } else {   
  66.                     System.out.println("创建表 "+tableName+" 失败");   
  67.                     return;   
  68.                 }   
  69.             }   
  70.             conn.setAutoCommit(false);   
  71.             newStatement = conn.prepareStatement(preSql.toString());   
  72.   
  73.         } else if(curRow>0) {   
  74.             // 一般行   
  75.             int col = rowlist.size();   
  76.             for (int i = 0; i < col; i++) {   
  77.                 newStatement.setString(i + 1, rowlist.get(i).toString());   
  78.             }   
  79.             newStatement.addBatch();   
  80.             if (curRow % 1000 == 0) {   
  81.                 newStatement.executeBatch();   
  82.                 conn.commit();   
  83.             }   
  84.         }   
  85.     }   
  86.        
  87.     private static Connection getNew_Conn() {   
  88.         Connection conn = null;   
  89.         Properties props = new Properties();   
  90.         FileInputStream fis = null;   
  91.   
  92.         try {   
  93.             fis = new FileInputStream("D:/database.properties");   
  94.             props.load(fis);   
  95.             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());   
  96.             // String jdbcURLString =   
  97.             // "jdbc:oracle:thin:@192.168.0.28:1521:orcl";   
  98.             StringBuffer jdbcURLString = new StringBuffer();   
  99.             jdbcURLString.append("jdbc:oracle:thin:@");   
  100.             jdbcURLString.append(props.getProperty("host"));   
  101.             jdbcURLString.append(":");   
  102.             jdbcURLString.append(props.getProperty("port"));   
  103.             jdbcURLString.append(":");   
  104.             jdbcURLString.append(props.getProperty("database"));   
  105.             conn = DriverManager.getConnection(jdbcURLString.toString(), props   
  106.                     .getProperty("user"), props.getProperty("password"));   
  107.         } catch (Exception e) {   
  108.             e.printStackTrace();   
  109.         } finally {   
  110.             try {   
  111.                 fis.close();   
  112.             } catch (IOException e) {   
  113.                 e.printStackTrace();   
  114.             }   
  115.         }   
  116.         return conn;   
  117.     }   
  118.        
  119.     public int close() {   
  120.         try {   
  121.             newStatement.executeBatch();   
  122.             conn.commit();   
  123.             System.out.println("数据写入完毕");   
  124.             this.newStatement.close();   
  125.             this.statement.close();   
  126.             this.conn.close();   
  127.             return 1;   
  128.         } catch (SQLException e) {   
  129.             return 0;   
  130.         }   
  131.     }   
  132. }  
Java代码  收藏代码
  1. package com.gaosheng.util.examples.xls;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.IOException;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.PreparedStatement;  
  8. import java.sql.SQLException;  
  9. import java.sql.Statement;  
  10. import java.util.List;  
  11. import java.util.Properties;  
  12.   
  13. import com.gaosheng.util.xls.XxlsAbstract;  
  14.   
  15. public class XxlsBig extends XxlsAbstract {  
  16.     public static void main(String[] args) throws Exception {  
  17.         XxlsBig howto = new XxlsBig("temp_table");  
  18.         howto.processOneSheet("F:/new.xlsx",1);  
  19.         howto.process("F:/new.xlsx");  
  20.         howto.close();  
  21.     }  
  22.       
  23.     public XxlsBig(String tableName) throws SQLException{  
  24.         this.conn = getNew_Conn();  
  25.         this.statement = conn.createStatement();  
  26.         this.tableName = tableName;  
  27.     }  
  28.   
  29.     private Connection conn = null;  
  30.     private Statement statement = null;  
  31.     private PreparedStatement newStatement = null;  
  32.   
  33.     private String tableName = "temp_table";  
  34.     private boolean create = true;  
  35.       
  36.     public void optRows(int sheetIndex,int curRow, List<String> rowlist) throws SQLException {  
  37.         if (sheetIndex == 0 && curRow == 0) {  
  38.             StringBuffer preSql = new StringBuffer("insert into " + tableName  
  39.                     + " values(");  
  40.             StringBuffer table = new StringBuffer("create table " + tableName  
  41.                     + "(");  
  42.             int c = rowlist.size();  
  43.             for (int i = 0; i < c; i++) {  
  44.                 preSql.append("?,");  
  45.                 table.append(rowlist.get(i));  
  46.                 table.append("  varchar2(100) ,");  
  47.             }  
  48.   
  49.             table.deleteCharAt(table.length() - 1);  
  50.             preSql.deleteCharAt(preSql.length() - 1);  
  51.             table.append(")");  
  52.             preSql.append(")");  
  53.             if (create) {  
  54.                 statement = conn.createStatement();  
  55.                 try{  
  56.                     statement.execute("drop table "+tableName);  
  57.                 }catch(Exception e){  
  58.                       
  59.                 }finally{  
  60.                     System.out.println("表 "+tableName+" 删除成功");  
  61.                 }  
  62.                 if (!statement.execute(table.toString())) {  
  63.                     System.out.println("创建表 "+tableName+" 成功");  
  64.                     // return;  
  65.                 } else {  
  66.                     System.out.println("创建表 "+tableName+" 失败");  
  67.                     return;  
  68.                 }  
  69.             }  
  70.             conn.setAutoCommit(false);  
  71.             newStatement = conn.prepareStatement(preSql.toString());  
  72.   
  73.         } else if(curRow>0) {  
  74.             // 一般行  
  75.             int col = rowlist.size();  
  76.             for (int i = 0; i < col; i++) {  
  77.                 newStatement.setString(i + 1, rowlist.get(i).toString());  
  78.             }  
  79.             newStatement.addBatch();  
  80.             if (curRow % 1000 == 0) {  
  81.                 newStatement.executeBatch();  
  82.                 conn.commit();  
  83.             }  
  84.         }  
  85.     }  
  86.       
  87.     private static Connection getNew_Conn() {  
  88.         Connection conn = null;  
  89.         Properties props = new Properties();  
  90.         FileInputStream fis = null;  
  91.   
  92.         try {  
  93.             fis = new FileInputStream("D:/database.properties");  
  94.             props.load(fis);  
  95.             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());  
  96.             // String jdbcURLString =  
  97.             // "jdbc:oracle:thin:@192.168.0.28:1521:orcl";  
  98.             StringBuffer jdbcURLString = new StringBuffer();  
  99.             jdbcURLString.append("jdbc:oracle:thin:@");  
  100.             jdbcURLString.append(props.getProperty("host"));  
  101.             jdbcURLString.append(":");  
  102.             jdbcURLString.append(props.getProperty("port"));  
  103.             jdbcURLString.append(":");  
  104.             jdbcURLString.append(props.getProperty("database"));  
  105.             conn = DriverManager.getConnection(jdbcURLString.toString(), props  
  106.                     .getProperty("user"), props.getProperty("password"));  
  107.         } catch (Exception e) {  
  108.             e.printStackTrace();  
  109.         } finally {  
  110.             try {  
  111.                 fis.close();  
  112.             } catch (IOException e) {  
  113.                 e.printStackTrace();  
  114.             }  
  115.         }  
  116.         return conn;  
  117.     }  
  118.       
  119.     public int close() {  
  120.         try {  
  121.             newStatement.executeBatch();  
  122.             conn.commit();  
  123.             System.out.println("数据写入完毕");  
  124.             this.newStatement.close();  
  125.             this.statement.close();  
  126.             this.conn.close();  
  127.             return 1;  
  128.         } catch (SQLException e) {  
  129.             return 0;  
  130.         }  
  131.     }  
  132. }  

 继承类:XxlsPrint,作用:将数据输出到控制台

Java代码 复制代码
  1. package com.gaosheng.util.examples.xls;   
  2.   
  3. import java.sql.SQLException;   
  4. import java.util.List;   
  5.   
  6. import com.gaosheng.util.xls.XxlsAbstract;   
  7.   
  8. public class XxlsPrint extends XxlsAbstract {   
  9.   
  10.     @Override  
  11.     public void optRows(int sheetIndex,int curRow, List<String> rowlist) throws SQLException {   
  12.         for (int i = 0; i < rowlist.size(); i++) {   
  13.             System.out.print("'" + rowlist.get(i) + "',");   
  14.         }   
  15.         System.out.println();   
  16.     }   
  17.   
  18.     public static void main(String[] args) throws Exception {   
  19.         XxlsPrint howto = new XxlsPrint();   
  20.         howto.processOneSheet("F:/new.xlsx",1);   
  21. //      howto.processAllSheets("F:/new.xlsx");   
  22.     }   
  23. }  
Java代码  收藏代码
  1. package com.gaosheng.util.examples.xls;  
  2.   
  3. import java.sql.SQLException;  
  4. import java.util.List;  
  5.   
  6. import com.gaosheng.util.xls.XxlsAbstract;  
  7.   
  8. public class XxlsPrint extends XxlsAbstract {  
  9.   
  10.     @Override  
  11.     public void optRows(int sheetIndex,int curRow, List<String> rowlist) throws SQLException {  
  12.         for (int i = 0; i < rowlist.size(); i++) {  
  13.             System.out.print("'" + rowlist.get(i) + "',");  
  14.         }  
  15.         System.out.println();  
  16.     }  
  17.   
  18.     public static void main(String[] args) throws Exception {  
  19.         XxlsPrint howto = new XxlsPrint();  
  20.         howto.processOneSheet("F:/new.xlsx",1);  
  21. //      howto.processAllSheets("F:/new.xlsx");  
  22.     }  
  23. }  

 源代码在附件中,还包含了说明文件、数据库配置文件、以及整合xls文件和xlsx文件读取的类:Xls2Do。

 

  • src.rar (9.7 KB)
  • 下载次数: 37
分享到:
评论

相关推荐

    (转)大数据量的excel文件读取——2003及之前版本(含代码及示例)

    在IT行业中,处理大数据量的Excel文件是一项常见的任务,特别是在数据分析、报表生成和数据导入导出等场景。本文主要探讨如何高效地读取2003及之前版本的Excel文件,这些版本通常采用.BIFF(Binary Interchange File...

    安卓Android源码——安卓读取Excel文件获取表格数据.rar

    这个名为"安卓Android源码——安卓读取Excel文件获取表格数据.rar"的压缩包文件,很可能包含了一个示例项目,教你如何在Android应用中实现这一功能。 首先,让我们了解在Android中读取Excel文件的基本步骤。Android...

    安卓Android源码——安卓读取Excel文件获取表格数据.zip

    本项目“安卓Android源码——安卓读取Excel文件获取表格数据”提供了一个示例,展示了如何在Android应用中实现这一功能。下面将详细探讨相关知识点。 1. **Excel文件格式** Excel文件通常以`.xls`或`.xlsx`为扩展...

    C++读写Excel文件

    OpenXLSX是一个轻量级且高效的开源库,它允许开发者在C++环境中方便地读取、写入、创建和修改.xlsx格式的Excel文件。这个库以其简洁的API和对现代C++标准的良好支持,为开发者提供了强大的功能。 OpenXLSX库的核心...

    安卓Andriod源码——安卓读取Excel文件获取表格数据.zip

    此外,考虑到性能和内存消耗,可能需要对大数据量的Excel文件进行分页处理,而不是一次性加载所有数据。 这个压缩包中的“cf_shuangSeQiu”文件可能是源码的一部分,但具体细节无法在此处分析,因为它不是一个明确...

    android读取Excel文件(Android studio开发环境)

    在Android平台上,读取Excel文件是一项常见的需求,例如在数据导入、数据分析或报表展示等场景。本项目将探讨如何在Android Studio开发环境中实现这一功能。首先,我们需要了解Android对文件操作的基本方法,以及...

    C# 导入Excel读取图片上传

    总的来说,C#中导入Excel读取图片的方法主要分为使用.NET Interop组件和第三方库如EPPlus。选择哪种方法取决于项目需求,如性能、兼容性、是否依赖Office等因素。对于图片上传,通常还会涉及文件流处理、网络传输等...

    WinRunner之读取excel文件数据的应用

    以下是一段典型的WinRunner脚本代码示例,用于读取指定的Excel文件中的“name”和“pwd”两列数据: ```plaintext table = "C:\\default.xls"; public function get_field_value(in table, in fieldname) { auto ...

    使用odbc驱动读取excel

    ODBC是一个由Microsoft开发的数据访问接口,它为各种数据库系统提供了一个标准的应用程序编程接口(API),使得开发者可以编写一次代码,就能访问多种数据库,如MySQL、SQL Server、Oracle以及我们的主题——Excel。...

    python工具-excel批量导入mysql (几千万数据半小时可搞定)

    由于大数据量可能导致内存溢出,我们可以分批写入数据,比如每次处理10000行: ```python def batch_insert(connection, df, table_name, chunksize=10000): for chunk in df.iterrows(chunksize=chunksize): ...

    excel reader 2007 03 21

    流式读取适用于大文件,避免一次性加载整个文件导致内存溢出;内存读取则适合小文件,读取速度快,但占用内存。 6. **数据处理**:读取Excel文件后,开发人员可能会进行各种数据处理,如过滤、排序、统计分析,甚至...

    DFFmeasurement-python读取excel数据demo

    首先,要读取Excel文件,我们需要导入Python的一个第三方库——pandas。Pandas是Python中用于数据分析的核心库,提供了DataFrame对象,它是一个二维表格型数据结构,可以方便地进行数据清洗、转换和分析。 安装...

    ASP.NET源码——Excel导入SQLserver源码.zip

    在这个"ASP.NET源码——Excel导入SQLserver源码.zip"的压缩包中,我们可以推测这是一份示例代码,用于演示如何在ASP.NET环境中读取Excel文件并将其数据导入到SQL Server数据库中。 首先,我们需要了解Excel文件的...

    导出Excel文件源码+资源

    `xlsx.js`是一个强大的库,专门用于处理Excel文件,它能够读取、写入和操作XLSX和XLSM文件格式,这两种都是Microsoft Excel广泛使用的二进制文件格式。通过这个库,开发者可以方便地创建工作表,设置单元格的值,...

    excel类库,支持excel2003,2007读写操作

    2. **支持的格式**:ExcelManger支持两种主要的Excel文件格式——.xls(Excel 2003)和.xlsx(Excel 2007及以上)。.xls格式基于二进制文件格式BIFF(Binary Interchange File Format),而.xlsx则是基于Open XML...

    ExcelUtil便捷读取工具 v3.1.6.zip

    《ExcelUtil便捷读取工具 v3.1.6——高效处理Excel数据的利器》 ExcelUtil便捷读取工具是一款高效且易用的Java库,专为处理Excel数据而设计,适用于各种开发场景,如数据分析、报表生成、数据导入导出等。在v3.1.6...

    安卓Android源码——android 读取展示office2007.rar

    在"安卓Android源码——android 读取展示office2007.rar"中,包含的三个子文件OliveDOCLibrary.zip、OliveXLSLibrary.zip和OlivePPTLibrary.zip可能提供了读取和展示这些文件的库或示例代码。 1. OliveDOCLibrary....

    MATLAB与Excel文件的数据交互.doc

    这些函数不仅能够帮助我们轻松获取Excel文件的基本信息,还能够方便地读取Excel中的数据,进而应用于MATLAB中的数据分析与处理任务。此外,通过合理的代码设计(如关闭不必要的Excel进程),可以进一步提高程序的...

Global site tag (gtag.js) - Google Analytics