1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > [转]Asp.Net下导出/导入规则的Excel(.xls)文件

[转]Asp.Net下导出/导入规则的Excel(.xls)文件

时间:2023-12-18 17:37:53

相关推荐

[转]Asp.Net下导出/导入规则的Excel(.xls)文件

DataTable中的数据导出Excel文件

/**////<summary>

///将DataTable中的数据导出到指定的Excel文件中

///</summary>

///<paramname="page">Web页面对象</param>

///<paramname="tab">包含被导出数据的DataTable对象</param>

///<paramname="FileName">Excel文件的名称</param>

publicstaticvoidExport(System.Web.UI.Pagepage,System.Data.DataTabletab,stringFileName)

{

System.Web.HttpResponsehttpResponse=page.Response;

System.Web.UI.WebControls.DataGriddataGrid=newSystem.Web.UI.WebControls.DataGrid();

dataGrid.DataSource=tab.DefaultView;

dataGrid.AllowPaging=false;

dataGrid.HeaderStyle.BackColor=System.Drawing.Color.Green;

dataGrid.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;

dataGrid.HeaderStyle.Font.Bold=true;

dataGrid.DataBind();

httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8));//filename="*.xls";

httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");

httpResponse.ContentType="application/ms-excel";

System.IO.StringWritertw=newSystem.IO.StringWriter();

System.Web.UI.HtmlTextWriterhw=newSystem.Web.UI.HtmlTextWriter(tw);

dataGrid.RenderControl(hw);

stringfilePath=page.Server.MapPath("..")+"\\Files\\"+FileName;

System.IO.StreamWritersw=System.IO.File.CreateText(filePath);

sw.Write(tw.ToString());

sw.Close();

DownFile(httpResponse,FileName,filePath);

httpResponse.End();

}

privatestaticboolDownFile(System.Web.HttpResponseResponse,stringfileName,stringfullPath)

{

try

{

Response.ContentType="application/octet-stream";

Response.AppendHeader("Content-Disposition","attachment;filename="+

HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)+";charset=GB2312");

System.IO.FileStreamfs=System.IO.File.OpenRead(fullPath);

longfLen=fs.Length;

intsize=102400;//每100K同时下载数据

byte[]readData=newbyte[size];//指定缓冲区的大小

if(size>fLen)size=Convert.ToInt32(fLen);

longfPos=0;

boolisEnd=false;

while(!isEnd)

{

if((fPos+size)>fLen)

{

size=Convert.ToInt32(fLen-fPos);

readData=newbyte[size];

isEnd=true;

}

fs.Read(readData,0,size);//读入一个压缩块

Response.BinaryWrite(readData);

fPos+=size;

}

fs.Close();

System.IO.File.Delete(fullPath);

returntrue;

}

catch

{

returnfalse;

}

}

将指定Excel文件中的数据转换成DataTable

/**////<summary>

///将指定Excel文件中的数据转换成DataTable对象,供应用程序进一步处理

///</summary>

///<paramname="filePath"></param>

///<returns></returns>

publicstaticSystem.Data.DataTableImport(stringfilePath)

{

System.Data.DataTablers=newSystem.Data.DataTable();

boolcanOpen=false;

OleDbConnectionconn=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+

"DataSource="+filePath+";"+

"ExtendedProperties=\"Excel8.0;\"");

try//尝试数据连接是否可用

{

conn.Open();

conn.Close();

canOpen=true;

}

catch{}

if(canOpen)

{

try//如果数据连接可以打开则尝试读入数据

{

OleDbCommandmyOleDbCommand=newOleDbCommand("SELECT*FROM[Sheet1$]",conn);

OleDbDataAdaptermyData=newOleDbDataAdapter(myOleDbCommand);

myData.Fill(rs);

conn.Close();

}

catch//如果数据连接可以打开但是读入数据失败,则从文件中提取出工作表的名称,再读入数据

{

stringsheetName=GetSheetName(filePath);

if(sheetName.Length>0)

{

OleDbCommandmyOleDbCommand=newOleDbCommand("SELECT*FROM["+sheetName+"$]",conn);

OleDbDataAdaptermyData=newOleDbDataAdapter(myOleDbCommand);

myData.Fill(rs);

conn.Close();

}

}

}

else

{

System.IO.StreamReadertmpStream=File.OpenText(filePath);

stringtmpStr=tmpStream.ReadToEnd();

tmpStream.Close();

rs=GetDataTableFromString(tmpStr);

tmpStr="";

}

returnrs;

}

/**////<summary>

///将指定Html字符串的数据转换成DataTable对象--根据“<tr><td>”等特殊字符进行处理

///</summary>

///<paramname="tmpHtml">Html字符串</param>

///<returns></returns>

privatestaticDataTableGetDataTableFromString(stringtmpHtml)

{

stringtmpStr=tmpHtml;

DataTableTB=newDataTable();

//先处理一下这个字符串,删除第一个<tr>之前合最后一个</tr>之后的部分

intindex=tmpStr.IndexOf("<tr");

if(index>-1)

tmpStr=tmpStr.Substring(index);

else

returnTB;

index=tmpStr.LastIndexOf("</tr>");

if(index>-1)

tmpStr=tmpStr.Substring(0,index+5);

else

returnTB;

boolexistsSparator=false;

charSeparator=Convert.ToChar("^");

//如果原字符串中包含分隔符“^”则先把它替换掉

if(tmpStr.IndexOf(Separator.ToString())>-1)

{

existsSparator=true;

tmpStr=tmpStr.Replace("^","^$&^");

}

//先根据“</tr>”分拆

string[]tmpRow=tmpStr.Replace("</tr>","^").Split(Separator);

for(inti=0;i<tmpRow.Length-1;i++)

{

DataRownewRow=TB.NewRow();

stringtmpStrI=tmpRow[i];

if(tmpStrI.IndexOf("<tr")>-1)

{

tmpStrI=tmpStrI.Substring(tmpStrI.IndexOf("<tr"));

if(tmpStrI.IndexOf("display:none")<0||tmpStrI.IndexOf("display:none")>tmpStrI.IndexOf(">"))

{

tmpStrI=tmpStrI.Replace("</td>","^");

string[]tmpField=tmpStrI.Split(Separator);

for(intj=0;j<tmpField.Length-1;j++)

{

tmpField[j]=RemoveString(tmpField[j],"<font>");

index=tmpField[j].LastIndexOf(">")+1;

if(index>0)

{

stringfield=tmpField[j].Substring(index,tmpField[j].Length-index);

if(existsSparator)field=field.Replace("^$&^","^");

if(i==0)

{

stringtmpFieldName=field;

intsn=1;

while(TB.Columns.Contains(tmpFieldName))

{

tmpFieldName=field+sn.ToString();

sn+=1;

}

TB.Columns.Add(tmpFieldName);

}

else

{

newRow[j]=field;

}

}//endofif(index>0)

}

if(i>0)

TB.Rows.Add(newRow);

}

}

}

TB.AcceptChanges();

returnTB;

}

/**////<summary>

///从指定Html字符串中剔除指定的对象

///</summary>

///<paramname="tmpHtml">Html字符串</param>

///<paramname="remove">需要剔除的对象--例如输入"<font>"则剔除"<font???????>"和"</font>>"</param>

///<returns></returns>

publicstaticstringRemoveString(stringtmpHtml,stringremove)

{

tmpHtml=tmpHtml.Replace(remove.Replace("<","</"),"");

tmpHtml=RemoveStringHead(tmpHtml,remove);

returntmpHtml;

}

/**////<summary>

///只供方法RemoveString()使用

///</summary>

///<returns></returns>

privatestaticstringRemoveStringHead(stringtmpHtml,stringremove)

{

//为了方便注释,假设输入参数remove="<font>"

if(remove.Length<1)returntmpHtml;//参数remove为空:不处理返回

if((remove.Substring(0,1)!="<")||(remove.Substring(remove.Length-1)!=">"))returntmpHtml;//参数remove不是<?????>:不处理返回

intIndexS=tmpHtml.IndexOf(remove.Replace(">",""));//查找“<font”的位置

intIndexE=-1;

if(IndexS>-1)

{

stringtmpRight=tmpHtml.Substring(IndexS,tmpHtml.Length-IndexS);

IndexE=tmpRight.IndexOf(">");

if(IndexE>-1)

tmpHtml=tmpHtml.Substring(0,IndexS)+tmpHtml.Substring(IndexS+IndexE+1);

if(tmpHtml.IndexOf(remove.Replace(">",""))>-1)

tmpHtml=RemoveStringHead(tmpHtml,remove);

}

returntmpHtml;

}

/**////<summary>

///将指定Excel文件中读取第一张工作表的名称

///</summary>

///<paramname="filePath"></param>

///<returns></returns>

privatestaticstringGetSheetName(stringfilePath)

{

stringsheetName="";

System.IO.FileStreamtmpStream=File.OpenRead(filePath);

byte[]fileByte=newbyte[tmpStream.Length];

tmpStream.Read(fileByte,0,fileByte.Length);

tmpStream.Close();

byte[]tmpByte=newbyte[]{Convert.ToByte(11),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),

Convert.ToByte(11),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),

Convert.ToByte(30),Convert.ToByte(16),Convert.ToByte(0),Convert.ToByte(0)};

intindex=GetSheetIndex(fileByte,tmpByte);

if(index>-1)

{

index+=16+12;

System.Collections.ArrayListsheetNameList=newSystem.Collections.ArrayList();

for(inti=index;i<fileByte.Length-1;i++)

{

bytetemp=fileByte[i];

if(temp!=Convert.ToByte(0))

sheetNameList.Add(temp);

else

break;

}

byte[]sheetNameByte=newbyte[sheetNameList.Count];

for(inti=0;i<sheetNameList.Count;i++)

sheetNameByte[i]=Convert.ToByte(sheetNameList[i]);

sheetName=System.Text.Encoding.Default.GetString(sheetNameByte);

}

returnsheetName;

}

/**////<summary>

///只供方法GetSheetName()使用

///</summary>

///<returns></returns>

privatestaticintGetSheetIndex(byte[]FindTarget,byte[]FindItem)

{

intindex=-1;

intFindItemLength=FindItem.Length;

if(FindItemLength<1)return-1;

intFindTargetLength=FindTarget.Length;

if((FindTargetLength-1)<FindItemLength)return-1;

for(inti=FindTargetLength-FindItemLength-1;i>-1;i--)

{

System.Collections.ArrayListtmpList=newSystem.Collections.ArrayList();

intfind=0;

for(intj=0;j<FindItemLength;j++)

{

if(FindTarget[i+j]==FindItem[j])find+=1;

}

if(find==FindItemLength)

{

index=i;

break;

}

}

returnindex;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。