1.jdbc_odbc 方式:
import java.sql.*; 
public class read { 
 String dbName = "sun.jdbc.odbc.JdbcOdbcDriver";
 String url = "jdbc:odbc:test";
 Connection con;
 Statement stmt;
 ResultSet rs;  public read() {    try {
        Class.forName(dbName);
        /**建立数据库连接*/      }catch(ClassNotFoundException e){
        System.out.print("加载数据库驱动程序错误:");         }
        try{
          con = DriverManager.getConnection(url,"","");
          stmt=con.createStatement();
          String sql="select * from [Sheet1$]";
          rs=stmt.executeQuery(sql);           while(rs.next()){
                         System.out.println(rs.getString(1)+
                           " "+ rs.getString(2)+" "+
                           rs.getString(3));
                     } 
        }catch(Exception e1){           System.out.println(e1.toString());
        }finally {
          try{
              rs.close();
              stmt.close();
              con.close();
              rs=null;
              stmt=null;
              con=null;
          }
          catch(Exception e){}
      }  }
 public static void main(String[] args) {
   read read1 = new read();
 }
}
2.apache 方式:
import java.io.IOException;
import java.io.InputStream; import java.util.Iterator; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow; 
/**
* A simple POI example of opening an Excel spreadsheet
* and writing its contents to the command line.
* @author  Tony Sintes
*/
public class POIExample {    public static void main( String [] args ) {
       try {
           InputStream input = POIExample.class.getResourceAsStream( "qa.xls" );
           POIFSFileSystem fs = new POIFSFileSystem( input );
           HSSFWorkbook wb = new HSSFWorkbook(fs);
           HSSFSheet sheet = wb.getSheetAt(0);
           
// Iterate over each row in the sheet
           Iterator rows = sheet.rowIterator();            
           for( HSSFRow row = (HSSFRow) rows.next(); rows.hasNext(); row = (HSSFRow) rows.next() ) {
               System.out.println( "Row #" + row.getRowNum() );    // Iterate over each cell in the row and print out the cell's content
               Iterator cells = row.cellIterator();
               for( HSSFCell cell = (HSSFCell) cells.next(); cells.hasNext(); cell = (HSSFCell) cells.next() ) {                    System.out.println( "Cell #" + cell.getCellNum() );
                   switch ( cell.getCellType() ) {
                       case HSSFCell.CELL_TYPE_NUMERIC:
                           System.out.println( cell.getNumericCellValue() );
                           break;
                       case HSSFCell.CELL_TYPE_STRING: 
                           System.out.println( cell.getStringCellValue() );
                           break;
                       default:
                           System.out.println( "unsuported sell type" );
                           break;
                   }
               }
               
           }
           
       } catch ( IOException ex ) {
           ex.printStackTrace();
       }
   }
3.java_com 方式:
package excelcom;
import com.jacob.com.*;
import com.jacob.activeX.*; 
public class DispatchTest
{
 public static void main(String[] args)
 {
   ActiveXComponent xl = new ActiveXComponent("Excel.Application");
   Object xlo = xl.getObject();
   try {
     System.out.println("version="+xl.getProperty("Version"));
     System.out.println("version="+Dispatch.get(xlo, "Version"));
     xl.setProperty("Visible", new Variant(true));
     Object workbooks = xl.getProperty("Workbooks").toDispatch();
     Object workbook = Dispatch.get(workbooks,"Add").toDispatch();
     Object sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch();
     Object a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                 new Object[] {"A1"},
                                 new int[1]).toDispatch();
     Object a2 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                 new Object[] {"A2"},
                                 new int[1]).toDispatch();
     Dispatch.put(a1, "Value", "123.456");
     Dispatch.put(a2, "Formula", "=A1*2");
     System.out.println("a1 from excel:"+Dispatch.get(a1, "Value"));
     System.out.println("a2 from excel:"+Dispatch.get(a2, "Value"));
     Variant f = new Variant(false);
     Dispatch.call(workbook, "Close", f);
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     xl.invoke("Quit", new Variant[] {});
   }
 }
} 各自有缺点和优点,还有技术难点.
例如:第一种方式: 不能显示字符:
1234567
2322222
3dfgdg8886789
-----------------------------------------------------------
1234567
2322222
3null8886789 不知那位对此有研究,贴一点心得吧.
我看了MS的方案很简单的:
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
   Dim myDataset As New DataSet()    Dim strConn As String
= "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                      "Data Source=" & Replace
(Server.MapPath("."), "\", "\\") & "\\exceltest.xls;" & _
               "Extended Properties=""Excel 8.0;"""
   'You must use the $ after the object you reference in
the spreadsheet
   Dim myOleDbDataAdapter As New OleDbDataAdapter("SELECT
* FROM [Sheet1$]", strConn)
   myOleDbDataAdapter.Fill(myDataset)
   DataGrid1.DataSource = myDataset.Tables(0).DefaultView
       DataGrid1.DataBind()
End Sub
</script>
</html> --  

解决方案 »

  1.   

    1.jdbc_odbc 方式:
    import java.sql.*; 
    public class read { 
     String dbName = "sun.jdbc.odbc.JdbcOdbcDriver";
     String url = "jdbc:odbc:test";
     Connection con;
     Statement stmt;
     ResultSet rs;  public read() {    try {
            Class.forName(dbName);
            /**建立数据库连接*/      }catch(ClassNotFoundException e){
            System.out.print("加载数据库驱动程序错误:");         }
            try{
              con = DriverManager.getConnection(url,"","");
              stmt=con.createStatement();
              String sql="select * from [Sheet1$]";
              rs=stmt.executeQuery(sql);           while(rs.next()){
                             System.out.println(rs.getString(1)+
                               " "+ rs.getString(2)+" "+
                               rs.getString(3));
                         } 
            }catch(Exception e1){           System.out.println(e1.toString());
            }finally {
              try{
                  rs.close();
                  stmt.close();
                  con.close();
                  rs=null;
                  stmt=null;
                  con=null;
              }
              catch(Exception e){}
          }  }
     public static void main(String[] args) {
       read read1 = new read();
     }
    }
    2.apache 方式:
    import java.io.IOException;
    import java.io.InputStream; import java.util.Iterator; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFRow; 
    /**
    * A simple POI example of opening an Excel spreadsheet
    * and writing its contents to the command line.
    * @author  Tony Sintes
    */
    public class POIExample {    public static void main( String [] args ) {
           try {
               InputStream input = POIExample.class.getResourceAsStream( "qa.xls" );
               POIFSFileSystem fs = new POIFSFileSystem( input );
               HSSFWorkbook wb = new HSSFWorkbook(fs);
               HSSFSheet sheet = wb.getSheetAt(0);
               
    // Iterate over each row in the sheet
               Iterator rows = sheet.rowIterator();            
               for( HSSFRow row = (HSSFRow) rows.next(); rows.hasNext(); row = (HSSFRow) rows.next() ) {
                   System.out.println( "Row #" + row.getRowNum() );    // Iterate over each cell in the row and print out the cell's content
                   Iterator cells = row.cellIterator();
                   for( HSSFCell cell = (HSSFCell) cells.next(); cells.hasNext(); cell = (HSSFCell) cells.next() ) {                    System.out.println( "Cell #" + cell.getCellNum() );
                       switch ( cell.getCellType() ) {
                           case HSSFCell.CELL_TYPE_NUMERIC:
                               System.out.println( cell.getNumericCellValue() );
                               break;
                           case HSSFCell.CELL_TYPE_STRING: 
                               System.out.println( cell.getStringCellValue() );
                               break;
                           default:
                               System.out.println( "unsuported sell type" );
                               break;
                       }
                   }
                   
               }
               
           } catch ( IOException ex ) {
               ex.printStackTrace();
           }
       }
    3.java_com 方式:
    package excelcom;
    import com.jacob.com.*;
    import com.jacob.activeX.*; 
    public class DispatchTest
    {
     public static void main(String[] args)
     {
       ActiveXComponent xl = new ActiveXComponent("Excel.Application");
       Object xlo = xl.getObject();
       try {
         System.out.println("version="+xl.getProperty("Version"));
         System.out.println("version="+Dispatch.get(xlo, "Version"));
         xl.setProperty("Visible", new Variant(true));
         Object workbooks = xl.getProperty("Workbooks").toDispatch();
         Object workbook = Dispatch.get(workbooks,"Add").toDispatch();
         Object sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch();
         Object a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                     new Object[] {"A1"},
                                     new int[1]).toDispatch();
         Object a2 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
                                     new Object[] {"A2"},
                                     new int[1]).toDispatch();
         Dispatch.put(a1, "Value", "123.456");
         Dispatch.put(a2, "Formula", "=A1*2");
         System.out.println("a1 from excel:"+Dispatch.get(a1, "Value"));
         System.out.println("a2 from excel:"+Dispatch.get(a2, "Value"));
         Variant f = new Variant(false);
         Dispatch.call(workbook, "Close", f);
       } catch (Exception e) {
         e.printStackTrace();
       } finally {
         xl.invoke("Quit", new Variant[] {});
       }
     }
    } 各自有缺点和优点,还有技术难点.
    例如:第一种方式: 不能显示字符:
    1234567
    2322222
    3dfgdg8886789
    -----------------------------------------------------------
    1234567
    2322222
    3null8886789 不知那位对此有研究,贴一点心得吧.
    我看了MS的方案很简单的:
    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.OleDb" %>
    <html>
    <script language="VB" runat="server">
    Sub Page_Load(sender As Object, e As EventArgs)
       Dim myDataset As New DataSet()    Dim strConn As String
    = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                          "Data Source=" & Replace
    (Server.MapPath("."), "\", "\\") & "\\exceltest.xls;" & _
                   "Extended Properties=""Excel 8.0;"""
       'You must use the $ after the object you reference in
    the spreadsheet
       Dim myOleDbDataAdapter As New OleDbDataAdapter("SELECT
    * FROM [Sheet1$]", strConn)
       myOleDbDataAdapter.Fill(myDataset)
       DataGrid1.DataSource = myDataset.Tables(0).DefaultView
           DataGrid1.DataBind()
    End Sub
    </script>
    </html> --