C# 从listView导入到excel

public void ExportExcel()
  {
//   DataTable xslTable=(DataTable)this.dgrd_Show.DataSource;//取得dataGrid绑定的DataSet
//   if(xslTable==null) return;
   if(this.lstView.Items.Count==0) return;

   string saveFileName="";
   bool fileSaved=false;
   SaveFileDialog saveDialog=new SaveFileDialog();
   saveDialog.DefaultExt ="xls";
   saveDialog.Filter="Excel文件|*.xls";
   saveDialog.FileName ="Sheet1";
   saveDialog.ShowDialog();
   saveFileName=saveDialog.FileName;
   if(saveFileName.IndexOf(":")<0) return; //被点了取消
  
   Excel.Application xlApp=new Excel.Application();

   if(xlApp==null)
   {
    MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
    return;
   }

   Excel.Workbooks workbooks=xlApp.Workbooks;
   Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
   Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
   Excel.Range range;

//   string oldCaption=this.lstView.ca.CaptionText;
   long totalCount=this.lstView.Items.Count;
   long rowRead=0;
   float percent=0;
   
   //写入表头
   for(int i=0;i<this.lstView.Columns.Count;i++)
   {
    worksheet.Cells[1,i+1]=this.lstView.Columns[i].Text.ToString();
   }

   //设置表头显示样式
   Excel.Range productTitle=worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[1,this.lstView.Columns.Count]);
   productTitle.Font.ColorIndex=5;
   productTitle.Font.Bold=true;
   productTitle.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter;
   productTitle.VerticalAlignment=Excel.XlVAlign.xlVAlignBottom;


   //写入数值
   this.lblpro.Visible=true;
   for(int j=0;j<this.lstView.Items.Count;j++)
   {
    worksheet.Cells[j+2,1]=this.lstView.Items[j].SubItems[0].Text;
    worksheet.Cells[j+2,2]=this.lstView.Items[j].SubItems[1].Text;
    worksheet.Cells[j+2,3]=this.lstView.Items[j].SubItems[2].Text;
    worksheet.Cells[j+2,4]=this.lstView.Items[j].SubItems[3].Text;
    rowRead++;
    percent=((float)(100*rowRead))/totalCount;   

    //显示填写进度
    this.lblpro.Text= "正在导出数据["+ percent.ToString("0.00")  +"%]...";
    Application.DoEvents();
   }
     
   this.lblpro.Visible=false;
   

   range=worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[this.lstView.Items.Count+2,this.lstView.Columns.Count]);
   range.BorderAround(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlThin,Excel.XlColorIndex.xlColorIndexAutomatic,null);
  
   range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
   range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle =Excel.XlLineStyle.xlContinuous;
   range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight =Excel.XlBorderWeight.xlThin;

   if(this.lstView.Columns.Count>1)
   {
    range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex =Excel.XlColorIndex.xlColorIndexAutomatic;
    range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
    range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
   }

   if(saveFileName!="")
   {   
    try
    {
     workbook.Saved =true;  
     workbook.SaveCopyAs(saveFileName);
     fileSaved=true;
    }
    catch(Exception ex)
    {
     fileSaved=false;
     MessageBox.Show("导出文件时出错,文件可能正被打开!\n"+ex.Message);
    }
   }
   else
   {
    fileSaved=false;
   }  
   
   xlApp.Quit();  
   GC.Collect();//强行销毁
   if(fileSaved && File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName);

  }

posted @ 2007-09-25 11:41  peak  阅读(1125)  评论(0)    收藏  举报