当前位置:编程学习 > C#/ASP.NET >>

dataset导出excel 再导入datagride出错 "外部表不是预期的格式。" 50分

public void CreateExcel(DataSet ds,string typeid,string FileName)  


HttpResponse resp; 

resp = Page.Response; 
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);    
string colHeaders= "", ls_item=""; 
int i=0; 
 
//定义表对象与行对像,同时用DataSet对其值进行初始化 
DataTable dt=ds.Tables["TOOLS_SIGNAL_MAKER"]; 
DataRow[] myRow=dt.Select("");  
// typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件 
if(typeid=="1") 

//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 
for(i=0;i<6;i++   )
colHeaders+=dt.Columns[i].Caption.ToString()+"\t"; 
colHeaders +=dt.Columns[i].Caption.ToString() +"\n";  

//向HTTP输出流中写入取得的数据信息 
resp.Write(colHeaders);  
//逐行处理数据   

foreach(DataRow row in myRow) 

//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n 
for(i=0;i<6;i++)

ls_item +=row[i].ToString() + "\t";      
ls_item += row[i].ToString() +"\n"; 

//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据   
resp.Write(ls_item);

ls_item="";



else 

if(typeid=="2") 
{  
//从DataSet中直接导出XML数据并且写到HTTP输出流中 
resp.Write(ds.GetXml()); 
}     

//写缓冲区中的数据到HTTP头文件中 
resp.End(); 


} --------------------编程问答-------------------- 我想导入datagride  sqlserver也行 --------------------编程问答-------------------- 给你你一段导出excel 表格的代码
private void   OutputExcel()   
{   
Excel.Application   excel;   
int   rowIndex=2;   
int   colIndex=0;   
excel=   new   Excel.ApplicationClass();;   
Excel.Workbook xBk   =   excel.Workbooks.Add(1);   
Excel.Worksheet xSt   =  (Excel.Worksheet)xBk.Worksheets[1];
excel.Visible=true; 
    
//   
//取得标题   
//  
this.dv=new DataView(ds.Tables[0]);
foreach(DataColumn   col   in   dv.Table.Columns)   
{   
colIndex++;   
excel.Cells[2,colIndex]   =   col.ColumnName;   
xSt.get_Range(excel.Cells[2,colIndex],excel.Cells[2,colIndex]).HorizontalAlignment   =   Excel.XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐   
}   
    
//   
//取得表格中的数据   
//   
foreach(DataRowView   row   in   dv)   
{   
rowIndex   ++;   
colIndex   =   0;   
foreach(DataColumn   col   in   dv.Table.Columns)   
{   
colIndex   ++;   
if(col.DataType   ==   System.Type.GetType("System.DateTime"))   
{   
excel.Cells[rowIndex,colIndex]   =   (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");   
xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment   =   Excel.XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐   
}  
else   
if(col.DataType   ==   System.Type.GetType("System.String"))   
{   
excel.Cells[rowIndex,colIndex]   =   "'"+row[col.ColumnName].ToString();   
xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment   =   Excel.XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐   
}   
else   
{   
excel.Cells[rowIndex,colIndex]   =   row[col.ColumnName].ToString();   
}   
}   
}   
//   
//加载一个合计行   
//   
int   rowSum   =   rowIndex+1;   
excel.Cells[rowSum,2]   =   this.lal_Num.Text;

xSt.get_Range(excel.Cells[rowSum,1],excel.Cells[rowSum,1]).HorizontalAlignment   =   Excel.XlHAlign.xlHAlignCenter;   
//   
//设置选中的部分的颜色   
//   
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,9]).Select();   
xSt.get_Range(excel.Cells[2,1],excel.Cells[2,colIndex]).Interior.ColorIndex   =   19;//设置为浅黄色,共计有56种   
//   
//取得整个报表的标题   
//   
excel.Cells[1,1]   =Str.ToString();   
//   
//设置整个报表的标题格式   
//   
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,1]).Font.Bold   =   true;   
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,1]).Font.Size   =   18;   
//   
//设置报表表格为最适应宽度   
//   
xSt.get_Range(excel.Cells[2,1],excel.Cells[2,colIndex]).Select();   
xSt.get_Range(excel.Cells[2,1],excel.Cells[2,colIndex]).Columns.AutoFit();   
//   
//设置整个报表的标题为跨列居中   
//   
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,colIndex]).Select();   
xSt.get_Range(excel.Cells[1,1],excel.Cells[1,colIndex]).HorizontalAlignment   =   Excel.XlHAlign.xlHAlignCenterAcrossSelection;   
//   
//绘制边框   
//   
xSt.get_Range(excel.Cells[2,1],excel.Cells[rowSum,colIndex]).Borders.LineStyle   =   1;   
xSt.get_Range(excel.Cells[2,1],excel.Cells[rowSum,1]).Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight   =   Excel.XlBorderWeight.xlThick;//设置左边线加粗   
xSt.get_Range(excel.Cells[2,1],excel.Cells[4,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeTop].Weight   =   Excel.XlBorderWeight.xlThick;//设置上边线加粗   
xSt.get_Range(excel.Cells[2,colIndex],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeRight].Weight   =   Excel.XlBorderWeight.xlThick;//设置右边线加粗   
xSt.get_Range(excel.Cells[rowSum,1],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight   =   Excel.XlBorderWeight.xlThick;//设置下边线加粗   
//   
//显示效果   
//   
}
--------------------编程问答-------------------- 前提必须引用Excel
using Excel; --------------------编程问答-------------------- 学习哈
顶 --------------------编程问答-------------------- 主要原因是你导出的Excel不是真正的用Office Excel Com组件生成的Excel真正的格式.
你可以将您导出的Excel用记事本打开看一下, 是流的形式导出的. 

可以参考这篇文章,了解一下具体原因:
http://blog.csdn.net/chengking/archive/2005/11/29/539514.aspx
--------------------编程问答-------------------- MARK --------------------编程问答-------------------- 偷懒的方式,使用 Excel 打开一次导出的 excel ,然后另存为的真正的 Excel 格式 --------------------编程问答-------------------- 这么乱的代码
水愿意看
头疼的
给楼主点意见!! --------------------编程问答-------------------- //舉個C#的簡單例子,沒測試,自己調試下吧
using System.Data.SqlClient;
using System.Text;
//

private void btnSave_Click(object sender, System.EventArgs e)
{
   SqlConnection sc=new SqlConnection("Server=yourserver;Database=yourdb;Uid=XX;Pwd=XXX;");
    SqlDataAdapter da=new SqlDataAdapter();
    da.SelectCommand=new SqlCommand("select * from T where id=@id",sc);
    da.SelectCommand.Parameters.Add("@id",1);
    DataSet ds=new DataSet();
    da.Fill(ds,"t")
   
   //生成excel
   string data = GenExcel("test",ds);
   Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf8");
   Response.ClearHeaders();
   Response.AppendHeader("Content-disposition", "attachment;filename=text.xls");
   Response.ContentType="application/ms-excel";
   Response.Clear();
   Response.Write(data);
   Response.End();
}

private string GenExcel(string reportname,DataSet ds)
{
    StringBuilder data=new StringBuilder();
    //寫出欄名
    foreach (DataColumn column in ds.Tables[0].Columns)
    {
    data.Append(column.ColumnName.TrimEnd() + "\t");
    }
    data.Append("\n");
  
    //寫出資料
      foreach (DataRow row in ds.Tables[0].Rows)
     {
       foreach (DataColumn column in ds.Tables[0].Columns)
     {
     data.Append(row[column].ToString().TrimEnd() + "\t");
     }
       data.Append("\n");
     }
     data.Append("\n");
     string str=data.ToString();
     return str;
}


补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,