DevExpress- GridControl数据导出到EXCEL
将DevExpress-GridControl数据导出到EXCEL,目前用过两种,一为利用GridControl函数操作,一为用流(IO)操作.区别在于前者可以将你在GridControl所见格式全部导入EXCEL,比如有时候我们在Bands里面拖拽出来的Title样式,后者最大优点在于速度很快,亲测10W条数据导出只需2秒左右;
No.1:用GridControl函数导出数据到EXCEL,建议设置Options下OptionsPrint—AutoWidth=False,使导出后单元格宽度根据内容长度自动调整.
SaveFileDialog fileDialog = new SaveFileDialog();
fileDialog.Filter = "Excel文件¦*.xls;";
fileDialog.FileName = this.Text + DateTime.Now.ToString("yyMMddHHmm");
if (fileDialog.ShowDialog() == DialogResult.OK)
{
gridControl1.ExportToXls(fileDialog.FileName);
XtraMessageBox.Show("操作成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
No.2:用流将数据导入EXCEL
#region 用流将数据导入到Excel中
public static void DataGridToExcel(DataTable dt, GridView dgv, string orderDateTime, string title)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl (*.xls)¦*.xls¦ Execl (*.xlsx)¦*.xlsx";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "导出Excel文件到";
DateTime now = SystemManage.GetTimeNow();
saveFileDialog.FileName = title + orderDateTime;
DialogResult dr = saveFileDialog.ShowDialog();
if (dr == DialogResult.Cancel)
return;
Stream myStream;
myStream = saveFileDialog.OpenFile();
string fileName = saveFileDialog.FileName;
if (fileName == "")
{
XtraMessageBox.Show("请输入文件名!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
string str = "";
try
{
//写标题
string stc = title + orderDateTime;
sw.WriteLine(stc);
for (int i = 0; i <= dgv.Columns.Count; i++)
{
if (i == 0)
{
str += "序号";
}
else
{
if (dgv.Columns[i - 1].Visible == true)
{
str += "\t";
str += dgv.Columns[i - 1].Caption;
}
}
}
sw.WriteLine(str);
int count = 0;
//写内容
for (int j = 0; j < dt.Rows.Count; j++)
{
count++;
string tempStr = "";
for (int k = 0; k < dt.Columns.Count + 1; k++)
{
if (k == 0)
{
tempStr = count.ToString();
}
else
{
if (dgv.Columns[k - 1].Visible == true)
{
tempStr += "\t";
tempStr += dt.Rows[j][k - 1].ToString().Trim();
}
}
}
sw.WriteLine(tempStr);
}
sw.Close();
sw.Dispose();
myStream.Close();
myStream.Dispose();
XtraMessageBox.Show("操作成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
catch (Exception e)
{
XtraMessageBox.Show("操作失败!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
finally
{
sw.Close();
myStream.Close();
}
}
#endregion
OK,调用就简单了:
ClassName.DataGridToExcel(dt, gridView1, SystemManage.GetTimeNow().ToString("yyMMddHHmmss"), this.Text + "报表");