首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求将ListView导出到Excel?解决方法

2012-04-20 
求将ListView导出到Excel?求将ListView导出到Excel?要求速度快一些的。找到了一些代码,但导出速度太慢了,难

求将ListView导出到Excel?
求将ListView导出到Excel?要求速度快一些的。
找到了一些代码,但导出速度太慢了,难以忍受。
            public   static   void   ExpToExcel(ListView   listviewname)
                {
                        if   (listviewname.Items.Count   ==   0)   return;
                        Excel.Application   excel   =   new   Excel.Application();
                        Excel.Workbooks   workbooks   =   excel.Workbooks;
                        Excel.Workbook   workbook   =   workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
                        Excel.Sheets   worksheets   =   workbook.Worksheets;
                        Excel.Worksheet   sheet   =   (Excel.Worksheet)worksheets.get_Item(1);
                        excel.Visible   =   false;


                        Excel.Range   range;
                        excel.Cells.Select();
                        excel.Cells.RowHeight   =   20;
                        excel.Cells.Font.Size   =   10;
                        excel.Cells.HorizontalAlignment   =   Excel.XlHAlign.xlHAlignCenter;

                        int   rowPos   =   2;
                        range   =   excel.get_Range(sheet.Cells[rowPos,   1],   sheet.Cells[rowPos,   1]);
                        range.Select();
                        excel.ScreenUpdating   =   false;

                        for   (int   i   =   1;   i   <=   listviewname.Columns.Count;   i++)
                        {
                                range   =   excel.get_Range(sheet.Cells[rowPos,   i],   sheet.Cells[rowPos,   i]);
                                range.Borders.LineStyle   =   1;
                                range.Font.Name   =   "宋体 ";
                                range.Font.Size   =   16;
                                range.Font.Bold   =   true;


                                range.HorizontalAlignment   =   Excel.XlHAlign.xlHAlignCenter;
                                range.ColumnWidth   =   18;
                                sheet.Cells[rowPos,   i]   =   listviewname.Columns[i   -   1].Text.ToString();
                        }
                        rowPos++;

                        foreach   (ListViewItem   item   in   listviewname.Items)
                        {
                                for   (int   i   =   1;   i   <=   listviewname.Columns.Count;   ++i)
                                {
                                        range   =   excel.get_Range(sheet.Cells[rowPos,   i],   sheet.Cells[rowPos,   i]);
                                        range.Borders.LineStyle   =   1;
                                        range.Font.Name   =   "宋体 ";
                                        range.Font.Size   =   12;
                                        range.HorizontalAlignment   =   Excel.XlHAlign.xlHAlignCenter;
                                        sheet.Cells[rowPos,   i]   =   item.SubItems[i   -   1].Text;
                                }
                                rowPos++;
                        }
                        excel.ScreenUpdating   =   true;
                          excel.Save( "abc ");
                         
                         

                     
                }

上面的代码导出速度太慢了。

------解决方案--------------------


把GridView改为 ListView就好了  ::::::

public partial class ExcelExport : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}


protected void Button1_Click(object sender, EventArgs e)
{

//Export the GridView to Excel

PrepareGridViewForExport(GridView1);

ExportGridView();

}


private void ExportGridView()
{

string attachment = "attachment; filename=Contacts.xls ";

Response.ClearContent();

Response.AddHeader( "content-disposition ", attachment);

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

StringWriter sw = new StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);

GridView1.RenderControl(htw);

Response.Write(sw.ToString());

Response.End();

}




public override void VerifyRenderingInServerForm(Control control)
{

}


private void PrepareGridViewForExport(Control gv)
{

LinkButton lb = new LinkButton();

Literal l = new Literal();

string name = String.Empty;

for (int i = 0; i < gv.Controls.Count; i++)
{

if (gv.Controls[i].GetType() == typeof(LinkButton))
{

l.Text = (gv.Controls[i] as LinkButton).Text;

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

else if (gv.Controls[i].GetType() == typeof(DropDownList))
{

l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text;

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

else if (gv.Controls[i].GetType() == typeof(CheckBox))
{

l.Text = (gv.Controls[i] as CheckBox).Checked ? "True " : "False ";

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

if (gv.Controls[i].HasControls())
{

PrepareGridViewForExport(gv.Controls[i]);

}

}

}

}
[解决办法]
你可以不用 PrepareGridViewForExport(Control gv)  函数。它是为 子控件 编写的,就是说,如果 GridView中有Button什么控件的拉,有这垃圾函数就不会影响导出了
[解决办法]
我写了一个,大家看看(放在我的网站上了,欢迎光临:)。
http://www.msproject.cn/Article/fast_Excel_write.aspx

快速保存ListView内存中大量数据到Excel

简介

本文描述如何快速保存ListView内存中大量数据到Excel的WorkSheet。关键之处是使用Range一次存储多行多列数据。

热点排行