ASP.NET读取Excel文件的三大方法浅析

开发 后端
ASP.NET读取Excel文件有什么方法呢?本文着重向你介绍三大方法,希望你在ASP.NET读取Excel文件方面有所认识。

最近研究了如何使得ASP.NET读取Excel文件更加高效呢,现总结如下:

ASP.NET读取Excel文件方法一:采用OleDB读取Excel文件:

把Excel文件当做一个数据源来进行数据的读取操作,实例如下:

public DataSet ExcelToDS(string Path)   
{   
 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";   
 OleDbConnection conn = new OleDbConnection(strConn);   
 conn.Open();     
 string strExcel = "";      
 OleDbDataAdapter myCommand = null;   
 DataSet ds = null;   
 strExcel="select * from [sheet1$]";   
 myCommand = new OleDbDataAdapter(strExcel, strConn);   
 ds = new DataSet();   
 myCommand.Fill(ds,"table1");      
 return ds;   
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

对于Excel中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";   
OleDbConnection conn = new OleDbConnection(strConn);   
DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);   
string tableName=schemaTable.Rows[0][2].ToString().Trim();    
  • 1.
  • 2.
  • 3.
  • 4.

另外:也可进行写入Excel文件,实例如下:

public void DSToExcel(string Path,DataSet oldds)   
{   
 //先得到汇总Excel的DataSet 主要目的是获得Excel在DataSet中的结构   
 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path1+";Extended Properties=Excel 8.0" ;   
 OleDbConnection myConn = new OleDbConnection(strCon) ;   
 string strCom="select * from [Sheet1$]";   
 myConn.Open ( ) ;   
 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;   
 ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);   
 //QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。   
 builder.QuotePrefix="[";     //获取insert语句中保留字符(起始位置)   
 builder.QuoteSuffix="]"//获取insert语句中保留字符(结束位置)   
 DataSet newds=new DataSet();   
 myCommand.Fill(newds ,"Table1") ;   
 for(int i=0;i<oldds.Tables[0].Rows.Count;i++)   
 {   
  //在这里不能使用ImportRow方法将一行导入到news中,
//因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。
//在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added   
  DataRow nrow=aDataSet.Tables["Table1"].NewRow();   
  for(int j=0;j<newds.Tables[0].Columns.Count;j++)   
  {   
   nrow[j]=oldds.Tables[0].Rows[i][j];   
  }   
  newds.Tables["Table1"].Rows.Add(nrow);   
 }   
 myCommand.Update(newds,"Table1");   
 myConn.Close();   
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

ASP.NET读取Excel文件方法二:引用的com组件:Microsoft.Office.Interop.Excel.dll读取Excel文件

首先是Excel.dll的获取,将Office安装目录下的Excel.exe文件Copy到DotNet的bin目录下,cmd到该目录下,运行 TlbImp EXCEL.EXE Excel.dll 得到Dll文件。

在项目中添加引用该dll文件.

//读取EXCEL的方法   (用范围区域读取数据)  
private void OpenExcel(string strFileName)  
{  
    object missing = System.Reflection.Missing.Value;  
    Application excel = new Application();//lauch excel application  
    if (excel == null)  
    {  
        Response.Write("<script>alert('Can't access excel')</script>");  
    }  
    else 
    {  
        excel.Visible = false;  excel.UserControl = true;  
        // 以只读的形式打开EXCEL文件  
        Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing,  
         missing, missing, missing, true, missing, missing, missing, missing, missing);  
        //取得第一个工作薄  
        Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1);  
 
        //取得总记录行数   (包括标题列)  
        int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数  
        //int columnsint = mySheet.UsedRange.Cells.Columns.Count;//得到列数  
 
        //取得数据范围区域  (不包括标题列)    
        Range rng1 = ws.Cells.get_Range("B2""B" + rowsint);   //item  
 
        Range rng2 = ws.Cells.get_Range("K2""K" + rowsint);  //Customer  
        object[,] arryItem= (object[,])rng1.Value2;   //get range's value  
        object[,] arryCus = (object[,])rng2.Value2;     
        //将新值赋给一个数组  
        string[,] arry = new string[rowsint-1, 2];  
        for (int i = 1; i <= rowsint-1; i++)  
        {  
            //Item_Code列  
            arry[i - 1, 0] =arryItem[i, 1].ToString();  
            //Customer_Name列  
            arry[i - 1, 1] = arryCus[i, 1].ToString();  
        }  
        Response.Write(arry[0, 0] + "  /  " + arry[0, 1] + "#" + arry[rowsint - 2, 0] + "  /  " + arry[rowsint - 2, 1]);  
    }  
     excel.Quit();  excel = null;  
    Process[] procs = Process.GetProcessesByName("excel");  
 
    foreach (Process pro in procs)  
    {  
        pro.Kill();//没有更好的方法,只有杀掉进程  
    }  
    GC.Collect();  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.

ASP.NET读取Excel文件方法三:将Excel文件转化成CSV(逗号分隔)的文件,用文件流读取(等价就是读取一个txt文本文件)。

先引用命名空间:

using System.Text;和using System.IO;  
          FileStream fs = new FileStream("d:\\Customer.csv", FileMode.Open, FileAccess.Read, FileShare.None);  
          StreamReader sr = new StreamReader(fs, System.Text.Encoding.GetEncoding(936));  
 
          string str = "";  
          string s = Console.ReadLine();  
          while (str != null)  
          {    str = sr.ReadLine();  
               string[] xu = new String[2];  
               xu = str.Split(',');  
               string ser = xu[0];   
               string dse = xu[1];                if (ser == s)  
               {  Console.WriteLine(dse);break;  
               }  
          }   sr.Close(); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

另外也可以将数据库数据导入到一个txt文件,实例如下:

//txt文件名  
string fn = DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + "PO014" + ".txt";  
 
OleDbConnection con = new OleDbConnection(conStr);   
con.Open();  
string sql = "select  ITEM,REQD_DATE,QTY,PUR_FLG,PO_NUM from TSD_PO014";          
/OleDbCommand mycom = new OleDbCommand("select * from TSD_PO014", mycon);  
//OleDbDataReader myreader = mycom.ExecuteReader();  //也可以用Reader读取数据  
DataSet ds = new DataSet();  
OleDbDataAdapter oda = new OleDbDataAdapter(sql, con);  
oda.Fill(ds, "PO014");  
DataTable dt = ds.Tables[0];  
 
FileStream fs = new FileStream(Server.MapPath("download/" + fn), FileMode.Create, FileAccess.ReadWrite);  
StreamWriter strmWriter = new StreamWriter(fs);    //存入到文本文件中   
 
//把标题写入.txt文件中   
//for (int i = 0; i <dt.Columns.Count;i++)  
//{  
//    strmWriter.Write(dt.Columns[i].ColumnName + "  ");  
//}  
 
foreach (DataRow dr in dt.Rows)  
{  
    string str0, str1, str2, str3;  
    string str = "|";  //数据用"|"分隔开  
    str0 = dr[0].ToString();  
    str1 = dr[1].ToString();  
    str2 = dr[2].ToString();  
    str3 = dr[3].ToString();  
    str4 = dr[4].ToString().Trim();  
    strmWriter.Write(str0);  
    strmWriter.Write(str);  
    strmWriter.Write(str1);  
    strmWriter.Write(str);  
    strmWriter.Write(str2);  
    strmWriter.Write(str);  
    strmWriter.Write(str3);  
    strmWriter.WriteLine();  //换行  
}  
strmWriter.Flush();  
strmWriter.Close();  
if (con.State == ConnectionState.Open)  
{  
    con.Close();  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.

ASP.NET读取Excel文件的方法就向你介绍到这里,希望对你了解ASP.NET读取Excel文件有所帮助。

【编辑推荐】

  1. ASP.NET程序员的学习之路杂谈
  2. ASP.NET自定义控件开发浅析
  3. ASP.NET服务器控件之生命周期浅析
  4. ASP.NET中Excel动态实现浅析
  5. ASP.NET操作Excel注意事项浅析
责任编辑:仲衡 来源: 百度空间
相关推荐

2009-07-24 13:01:44

ASP.NET页面跳转

2009-07-20 16:09:39

2009-07-28 10:01:16

ASP.NET Exc

2010-05-07 08:59:50

ASP.NET

2009-08-04 17:28:45

Apache支持ASP

2009-07-28 10:26:30

ASP.NET操作Ex

2009-07-27 10:18:12

TypeResolveASP.NET

2009-07-27 09:29:38

ASP.NET中Jav

2009-08-05 15:50:13

ASP.NET优点

2009-07-31 12:43:59

ASP.NET MVC

2009-07-23 13:47:46

ASP.NET数据缓存

2009-07-27 15:34:11

MembershipASP.NET

2024-03-15 11:35:11

配置文件应用程序开发

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 18:36:12

ASP.NET Che

2009-07-31 11:45:42

ASP.NET文件下载

2009-07-21 10:05:10

ASP.NET配置文件

2009-07-24 10:53:51

ASP.NET实现静态

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计

2024-08-19 01:00:00

读取配置文件接口应用程序
点赞
收藏

51CTO技术栈公众号