>백엔드 개발 >C#.Net 튜토리얼 >ASP.NET(C#)은 Excel 파일 내용을 읽습니다.

ASP.NET(C#)은 Excel 파일 내용을 읽습니다.

高洛峰
高洛峰원래의
2017-01-13 17:13:141695검색

.xls 형식 Office2003 이하
.xlsx 형식 Office2007 이상
.csv 형식 쉼표로 구분된 문자열 텍스트(위 두 파일 형식은 이 형식으로 저장 가능)
읽기 2가지가 있습니다. 처음 두 형식을 취하고 후자 형식을 읽는 방법.

아래 프로그램을 보세요:
페이지 프론트엔드:

<div>       <%-- 文件上传控件  用于将要读取的文件上传 并通过此控件获取文件的信息--%>      
<asp:FileUpload ID="fileSelect" runat="server" />          
<%-- 点击此按钮执行读取方法--%>       
<asp:Button ID="btnRead" runat="server" Text="ReadStart" />
</div>  

백엔드 코드:

//声明变量(属性)
 string currFilePath = string.Empty; //待读取文件的全路径 
 string currFileExtension = string.Empty;  //文件的扩展名 

 //Page_Load事件 注册按钮单击事件 
 protected void Page_Load(object sender,EventArgs e) 
 { 
     this.btnRead.Click += new EventHandler(btnRead_Click); 
 }

 
 //按钮单击事件   //里面的3个方法将在下面给出
 protected void btnRead_Click(object sender,EventArgs e)
 {
     Upload();  //上传文件方法
     if(this.currFileExtension ==".xlsx" || this.currFileExtension ==".xls")
       {
            DataTable dt = ReadExcelToTable(currFilePath);  //读取Excel文件(.xls和.xlsx格式)
       }
       else if(this.currFileExtension == ".csv")
         {
               DataTable dt = ReadExcelWidthStream(currFilePath);  //读取.csv格式文件
         }
 }

다음은 버튼 클릭 이벤트의 3가지 메소드를 나열합니다.

///<summary>
///上传文件到临时目录中 
///</ummary>
private void Upload()
{
HttpPostedFile file = this.fileSelect.PostedFile;
string fileName = file.FileName;
string tempPath = System.IO.Path.GetTempPath(); //获取系统临时文件路径
fileName = System.IO.Path.GetFileName(fileName); //获取文件名(不带路径)
this.currFileExtension = System.IO.Path.GetExtension(fileName); //获取文件的扩展名
this.currFilePath = tempPath + fileName; //获取上传后的文件路径 记录到前面声明的全局变量
file.SaveAs(this.currFilePath); //上传
}

///<summary>
///读取xls\xlsx格式的Excel文件的方法 
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
private DataTable ReadExcelToTable(string path)
{
//连接字符串
string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=&#39;Excel 8.0;HDR=NO;IMEX=1&#39;;"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
//string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties=&#39;Excel 8.0;HDR=NO;IMEX=1&#39;;"; //Office 07以下版本 因为本人用Office2010 所以没有用到这个连接字符串 可根据自己的情况选择 或者程序判断要用哪一个连接字符串
using(OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"Table"}); //得到所有sheet的名字
string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
string sql = string.Format("SELECT * FROM [{0}],firstSheetName); //查询字符串
OleDbDataAdapter ada =new OleDbDataAdapter(sql,connstring);
DataSet set = new DataSet();
ada.Fill(set);
return set.Tables[0];
}
}

///<summary>
///读取csv格式的Excel文件的方法 
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
private DataTable ReadExcelWithStream(string path)
{
DataTable dt = new DataTable();
bool isDtHasColumn = false; //标记DataTable 是否已经生成了列
StreamReader reader = new StreamReader(path,System.Text.Encoding.Default); //数据流
while(!reader.EndOfStream)
{
string meaage = reader.ReadLine();
string[] splitResult = message.Split(new char[]{&#39;,&#39;},StringSplitOption.None); //读取一行 以逗号分隔 存入数组
DataRow row = dt.NewRow();
for(int i = 0;i<splitResult.Length;i++)
{
if(!isDtHasColumn) //如果还没有生成列
{
dt.Columns.Add("column" + i,typeof(string));
}
row[i] = splitResult[i];
}
dt.Rows.Add(row); //添加行
isDtHasColumn = true; //读取第一行后 就标记已经存在列 再读取以后的行时,就不再生成列
}
return dt;
}


ASP.NET(C#) 엑셀 파일 내용 읽기 관련 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.