C# winform中 DataGridView 按显示顺序 导出到Excel

     想用vs里面自带的方法解决DataGridView 列头经过 DisplayIndex 排序后的导出Excel,

     使显示顺序和导出顺序一致,但是没有找到相应的方法,只好自己写了个

private void DataDiaplayOrderToExcel(DataGridView ordgv,string title)
{
string[] array = new string[ordgv.Columns.Count];

//获取Visble =true 的列
foreach (DataGridViewColumn column in ordgv.Columns)
{
if (column.Visible == true)
{
array[column.DisplayIndex] = column.HeaderText;
}
}
if (array.Length <= 0)
{
MessageBox.Show("NO Data");
return;
}
DataGridView dgv = new DataGridView();
dgv = ordgv;

//创建并打开Excel
Excel.Application myExcel = new Excel.Application();
myExcel.Application.Workbooks.Add(true);
myExcel.Visible = true;

myExcel.Cells[1, 1] = title;//标题
            Excel.Range range = myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, dgv.Columns.Count]);
            range.Merge(System.Reflection.Missing.Value);//合并

            range.HorizontalAlignment = 3;//居中
            range.VerticalAlignment = 3;//居中

int RowsCount = dgv.Rows.Count;
int ColumnsCount = array.Length;
int mm = 1;
for (int i = 0; i < ColumnsCount; i++)
{
string ColumnName;
try
{
ColumnName = array.GetValue(i).ToString();
}
catch
{
continue;
}
//导出列名
myExcel.Cells[1, mm] = ColumnName;
//导出列内容
for (int m = 0; m < RowsCount; m++)
{
try
{
myExcel.Cells[m + 2, mm] = dgv.Rows[m].Cells[ColumnName].Value.ToString();
}
catch
{ }
}
//执行完一列 mm++
mm++;

}

myExcel.Columns.EntireColumn.AutoFit();


}



posted @ 2011-11-21 14:24  爱睡的猫  阅读(1674)  评论(3)    收藏  举报