zoukankan      html  css  js  c++  java
  • ASP.NET读取Excel文件的三大方法浅析

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

    AD:

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

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

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

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

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

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

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

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

    1. //读取EXCEL的方法   (用范围区域读取数据)  
    2. private void OpenExcel(string strFileName)  
    3. {  
    4.     object missing = System.Reflection.Missing.Value;  
    5.     Application excel = new Application();//lauch excel application  
    6.     if (excel == null)  
    7.     {  
    8.         Response.Write("<script>alert('Can't access excel')</script>");  
    9.     }  
    10.     else 
    11.     {  
    12.         excel.Visible = false;  excel.UserControl = true;  
    13.         // 以只读的形式打开EXCEL文件  
    14.         Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing,  
    15.          missing, missing, missing, true, missing, missing, missing, missing, missing);  
    16.         //取得第一个工作薄  
    17.         Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1);  
    18.  
    19.         //取得总记录行数   (包括标题列)  
    20.         int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数  
    21.         //int columnsint = mySheet.UsedRange.Cells.Columns.Count;//得到列数  
    22.  
    23.         //取得数据范围区域  (不包括标题列)    
    24.         Range rng1 = ws.Cells.get_Range("B2""B" + rowsint);   //item  
    25.  
    26.         Range rng2 = ws.Cells.get_Range("K2""K" + rowsint);  //Customer  
    27.         object[,] arryItem= (object[,])rng1.Value2;   //get range's value  
    28.         object[,] arryCus = (object[,])rng2.Value2;     
    29.         //将新值赋给一个数组  
    30.         string[,] arry = new string[rowsint-1, 2];  
    31.         for (int i = 1; i <= rowsint-1; i++)  
    32.         {  
    33.             //Item_Code列  
    34.             arry[i - 1, 0] =arryItem[i, 1].ToString();  
    35.             //Customer_Name列  
    36.             arry[i - 1, 1] = arryCus[i, 1].ToString();  
    37.         }  
    38.         Response.Write(arry[0, 0] + "  /  " + arry[0, 1] + "#" + arry[rowsint - 2, 0] + "  /  " + arry[rowsint - 2, 1]);  
    39.     }  
    40.      excel.Quit();  excel = null;  
    41.     Process[] procs = Process.GetProcessesByName("excel");  
    42.  
    43.     foreach (Process pro in procs)  
    44.     {  
    45.         pro.Kill();//没有更好的方法,只有杀掉进程  
    46.     }  
    47.     GC.Collect();  

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

    先引用命名空间:

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

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

    1. //txt文件名  
    2. string fn = DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + "PO014" + ".txt";  
    3.  
    4. OleDbConnection con = new OleDbConnection(conStr);   
    5. con.Open();  
    6. string sql = "select  ITEM,REQD_DATE,QTY,PUR_FLG,PO_NUM from TSD_PO014";          
    7. /OleDbCommand mycom = new OleDbCommand("select * from TSD_PO014", mycon);  
    8. //OleDbDataReader myreader = mycom.ExecuteReader();  //也可以用Reader读取数据  
    9. DataSet ds = new DataSet();  
    10. OleDbDataAdapter oda = new OleDbDataAdapter(sql, con);  
    11. oda.Fill(ds, "PO014");  
    12. DataTable dt = ds.Tables[0];  
    13.  
    14. FileStream fs = new FileStream(Server.MapPath("download/" + fn), FileMode.Create, FileAccess.ReadWrite);  
    15. StreamWriter strmWriter = new StreamWriter(fs);    //存入到文本文件中   
    16.  
    17. //把标题写入.txt文件中   
    18. //for (int i = 0; i <dt.Columns.Count;i++)  
    19. //{  
    20. //    strmWriter.Write(dt.Columns[i].ColumnName + "  ");  
    21. //}  
    22.  
    23. foreach (DataRow dr in dt.Rows)  
    24. {  
    25.     string str0, str1, str2, str3;  
    26.     string str = "|";  //数据用"|"分隔开  
    27.     str0 = dr[0].ToString();  
    28.     str1 = dr[1].ToString();  
    29.     str2 = dr[2].ToString();  
    30.     str3 = dr[3].ToString();  
    31.     str4 = dr[4].ToString().Trim();  
    32.     strmWriter.Write(str0);  
    33.     strmWriter.Write(str);  
    34.     strmWriter.Write(str1);  
    35.     strmWriter.Write(str);  
    36.     strmWriter.Write(str2);  
    37.     strmWriter.Write(str);  
    38.     strmWriter.Write(str3);  
    39.     strmWriter.WriteLine();  //换行  
    40. }  
    41. strmWriter.Flush();  
    42. strmWriter.Close();  
    43. if (con.State == ConnectionState.Open)  
    44. {  
    45.     con.Close();  

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

    【编辑推荐】

    1. ASP.NET程序员的学习之路杂谈
    2. ASP.NET自定义控件开发浅析
    3. ASP.NET服务器控件之生命周期浅析
    4. ASP.NET中Excel动态实现浅析
    5. ASP.NET操作Excel注意事项浅析
    【责任编辑:李彦光 TEL:(010)68476606】

  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/2163673.html
Copyright © 2011-2022 走看看