// 导出列表信息到Excel public static void gSendGridInfoToExcel(DataGrid GridX) { Excel.Application excel= new Excel.ApplicationClass(); Excel._Workbook xBk = excel.Workbooks.Add(true); Excel._Worksheet xSt = (Excel._Worksheet)xBk.ActiveSheet; Excel.Range excelCell=null; try { //赋值对象 object[] objarr; DataTable dtTest=new DataTable();; int i,j; int iRows,iCows; int iVisable; iVisable=0; iCows=0; ArrayList list=new ArrayList(); //如果绑定数据源是DataTable和DataSet,取得行数 if (GridX.DataSource is System.Data.DataSet || GridX.DataSource is System.Data.DataTable) { dtTest=(DataTable)GridX.DataSource; iRows=dtTest.Rows.Count; } else if (GridX.DataSource is System.Data.DataView) { DataView dvTest=(DataView)GridX.DataSource; iRows=dvTest.Count; dtTest=dvTest.Table; } //如果是集合取得行数 else { System.Collections.CollectionBase ColTest; ColTest=(System.Collections.CollectionBase)GridX.DataSource; iRows=ColTest.Count; } //如果有TableStyles则根据TableStyles取得(标题行) if (GridX.TableStyles.Count>0) { iCows=GridX.TableStyles[0].GridColumnStyles.Count; for(i=0;i<iCows;i++) { if(GridX.TableStyles[0].GridColumnStyles[i].Width>0) { iVisable++; list.Add(GridX.TableStyles[0].GridColumnStyles[i].HeaderText); } } objarr = new object[iVisable]; objarr=list.ToArray(); excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iVisable]); excelCell.Value2 = objarr; //数据行 for(i=0;i<iRows;i++) { objarr = new object[iVisable]; list.Clear(); for(j=0;j<iCows;j++) { if(GridX.TableStyles[0].GridColumnStyles[j].Width>0) { list.Add("'"+GridX[i,j].ToString().Replace("\n","")); } } if (list.Equals(System.DBNull.Value)) { break; } objarr=list.ToArray(); excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iVisable]); excelCell.Value2 = objarr; } } else { iCows=dtTest.Columns.Count; for(i=0;i<iCows;i++) { list.Add(dtTest.Columns[i].Caption); } objarr = new object[iCows]; objarr=list.ToArray(); excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iCows]); excelCell.Value2 = objarr; //数据行 for(i=0;i<iRows;i++) { objarr = new object[iCows]; list.Clear(); for(j=0;j<iCows;j++) { list.Add("'"+GridX[i,j].ToString().Replace("\n","")); } if (list.Equals(System.DBNull.Value)) { break; } objarr=list.ToArray(); excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iCows]); excelCell.Value2 = objarr; } } dtTest.Dispose(); excel.Visible=true; } catch (System.Exception e) { throw e; } finally { excelCell=null; xBk=null; xSt=null; excel=null; GC.Collect(); } } }