ASP.NET学习社区ASP.NET学习区ASP.NET文摘 Asp.Net下导出/导入规则的Excel(.xls)文件

1  /  1  页   1 跳转 查看:348

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

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

DataTable中的数据导出Excel文件
/// <summary>
/// 将DataTable中的数据导出到指定的Excel文件中
/// </summary>
/// <param name="page">Web页面对象</param>
/// <param name="tab">包含被导出数据的DataTable对象</param>
/// <param name="FileName">Excel文件的名称</param>
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.C;
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("..")+"[url=file://\\Files\\]\\Files\\[/url]" +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.C;
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
/// <summary>
/// 将指定Excel文件中的数据转换成DataTable对象,供应用程序进一步处理
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 将指定HTML字符串的数据转换成DataTable对象 --根据“<tr><td>”等特殊字符进行处理
/// </summary>
/// <param name="tmpHTML">HTML字符串</param>
/// <returns></returns>
private static DataTable GetDataTableFromString(string tmpHTML)
{
string tmpStr=tmpHTML;
DataTable TB=new DataTable();
//先处理一下这个字符串,删除第一个<tr>之前合最后一个</tr>之后的部分
int index=tmpStr.IndexOf("<tr");
if(index>-1)
tmpStr=tmpStr.Substring(index);
else
return TB;
index=tmpStr.LastIndexOf("</tr>");
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("^","^$&^");
}
//先根据“</tr>”分拆
string[] tmpRow=tmpStr.Replace("</tr>","^").Split(Separator);
for(int i=0;i<tmpRow.Length-1;i++)
{
DataRow newRow=TB.NewRow();
string tmpStrI=tmpRow;
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(int j=0;j<tmpField.Length-1;j++)
{
tmpField[j]=RemoveString(tmpField[j],"<font>");
index=tmpField[j].LastIndexOf(">")+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.A
、哭┈゛.並不代表Wo屈服х. 退一步...並不象徵Wo認輸..→.放手.ǐ.o.並不表示Wo放棄.正如Wo微笑.並不意味Wo快樂┈┊
 

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

不错,实用
 

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

好东西!
 
1  /  1  页   1 跳转

版权所有 ASP.NET学习门户 2.0.1214   Sitemap  

返顶部