繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> Asp.Net下导出/导入规则的Excel(.xls)文件

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

2007-10-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:DataTable中的数据导出Excel文件 /// /// 将DataTable中的数据导出到指定的Excel文件中 /// /// Web页面对象 /// 包含被导出数据的DataTable对象 /// Excel文件的名称 public static void Export(System.Web.UI....
关键字:规则 文件 Excel xls Net Asp

DataTable中的数据导出Excel文件

///

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

///

///

Web页面对象

///

包含被导出数据的DataTable对象

///

Excel文件的名称

public static void Export(System.Web.UI.Page page,System.Data.DataTable tab,string FileName)

{

System.Web.HttpResponse httpResponse = page.Response;

System.Web.UI.WebControls.DataGrid dataGrid=new System.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.StringWriter tw = new System.IO.StringWriter() ;

System.Web.UI.HTMLTextWriter hw = new System.Web.UI.HTMLTextWriter (tw);

dataGrid.RenderControl(hw);

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

System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);

sw.Write(tw.ToString());

sw.Close();

DownFile(httpResponse,FileName,filePath);

httpResponse.End();

}

private static bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)

{

try

{

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

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

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

System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);

long fLen=fs.Length;

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

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

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

long fPos=0;

bool isEnd=false;

while (!isEnd)

{

if((fPos+size)>fLen)

{

size=Convert.ToInt32(fLen-fPos);

readData = new byte[size];

isEnd=true;

}

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

Response.BinaryWrite(readData);

fPos+=size;

}

fs.Close();

System.IO.File.Delete(fullPath);

return true;

}

catch

{

return false;

}

}

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

///

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

///

///

///

public static System.Data.DataTable Import(string filePath)

{

System.Data.DataTable rs = new System.Data.DataTable();

bool canOpen=false;

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+

"Data Source=" + filePath + ";" +

"Extended Properties=\"Excel 8.0;\"");

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

{

conn.Open();

conn.Close();

canOpen=true;

}

catch{}

if(canOpen)

{

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

{

OleDbCommand myOleDbCommand = new OleDbCommand("SELECT * FROM [Sheet1$]",conn);

OleDbDataAdapter myData = new OleDbDataAdapter(myOleDbCommand);

myData.Fill(rs);

conn.Close();

}

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

{

string sheetName=GetSheetName(filePath);

if(sheetName.Length>0)

{

OleDbCommand myOleDbCommand = new OleDbCommand("SELECT * FROM ["+sheetName+"$]",conn);

OleDbDataAdapter myData = new OleDbDataAdapter(myOleDbCommand);

myData.Fill(rs);

conn.Close();

}

}

}

else

{

System.IO.StreamReader tmpStream=File.OpenText(filePath);

string tmpStr=tmpStream.ReadToEnd();

tmpStream.Close();

rs=GetDataTableFromString(tmpStr);

tmpStr="";

}

return rs;

}

///

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

///

///

HTML字符串

///

private static DataTable GetDataTableFromString(string tmpHTML)

{

string tmpStr=tmpHTML;

DataTable TB=new DataTable();

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

int index=tmpStr.IndexOf("-1)

tmpStr=tmpStr.Substring(index);

else

return TB;

index=tmpStr.LastIndexOf("");

if(index>-1)

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

else

return TB;

bool existsSparator=false;

char Separator=Convert.ToChar("^");

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

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

{

existsSparator=true;

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

}

//先根据“”分拆

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

for(int i=0;i

{

DataRow newRow=TB.NewRow();

string tmpStrI=tmpRow[i];

if(tmpStrI.IndexOf("-1)

{

tmpStrI=tmpStrI.Substring(tmpStrI.IndexOf("

if(tmpStrI.IndexOf("display:none")tmpStrI.IndexOf(">"))

{

tmpStrI=tmpStrI.Replace("","^");

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

for(int j=0;j")+1;

if(index>0)

{

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

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

if(i==0)

{

string tmpFieldName=field;

int sn=1;

while(TB.Columns.Contains(tmpFieldName))

{

tmpFieldName=field+sn.ToString();

sn+=1;

}

TB.Columns.Add(tmpFieldName);

}

else

{

newRow[j]=field;

}

}//end of if(index>0)

}

if(i>0)

TB.Rows.Add(newRow);

}

}

}

TB.AcceptChanges();

return TB;

}

///

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

///

///

HTML字符串

///

需要剔除的对象--例如输入""则剔除""和">"

///

public static string RemoveString(string tmpHTML,string remove)

{

tmpHTML=tmpHTML.Replace(remove.Replace("<","

tmpHTML=RemoveStringHead(tmpHTML,remove);

return tmpHTML;

}

///

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

///

///

private static string RemoveStringHead(string tmpHTML,string remove)

{

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

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

if((remove.Substring(0,1)!="")) return tmpHTML;//参数remove不是:不处理返回

int IndexS=tmpHtml.IndexOf(remove.Replace(">",""));//查找“ int IndexE=-1;

if(IndexS>-1)

{

string tmpRight=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);

}

return tmpHTML;

}

///

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

///

///

///

private static string GetSheetName(string filePath)

{

string sheetName="";

System.IO.FileStream tmpStream=File.OpenRead(filePath);

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

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

tmpStream.Close();

byte[] tmpByte=new byte[]{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)};

int index=GetSheetIndex(fileByte,tmpByte);

if(index>-1)

{

index+=16+12;

System.Collections.ArrayList sheetNameList=new System.Collections.ArrayList();

for(int i=index;i

{

byte temp=fileByte[i];

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

sheetNameList.Add(temp);

else

break;

}

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

for(int i=0;i

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

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

}

return sheetName;

}

///

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

///

///

private static int GetSheetIndex(byte[] FindTarget,byte[] FindItem)

{

int index=-1;

int FindItemLength=FindItem.Length;

if(FindItemLength<1) return -1;

int FindTargetLength=FindTarget.Length;

if((FindTargetLength-1)-1;i--)

{

System.Collections.ArrayList tmpList=new System.Collections.ArrayList();

int find=0;

for(int j=0;j

{

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

}

if(find==FindItemLength)

{

index=i;

break;

}

}

return index;

}

责任编辑:admin
相关文章