使用DevExpress导出GridControl控件数据到excel文件
2017-01-09 16:12
681 查看
使用DevExpress可以实现将界面的GridControl的内容直接导出到excel文件,一般实现方法如下所示:
public void export(GridControl gridControl1)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "Excel文件(.xls)|*.xls";
string strtype = "Excel文件名";
saveFileDialog1.FileName = strtype + DateTime.Now.ToString("yyyyMMddhhmmss");
saveFileDialog1.OverwritePrompt = false; //已存在文件是否覆盖提示
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
return;
//已存在文件是否覆盖提示
while (System.IO.File.Exists(saveFileDialog1.FileName) &&
DevExpress.XtraEditors.XtraMessageBox.Show("该文件名已存在,是否覆盖?",
"提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
return;
}
if (saveFileDialog1.FileName != "")
{
try
{
System.IO.FileStream fs =(System.IO.FileStream)saveFileDialog1.OpenFile();
gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径
fs.Close();
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出成功!", "提示");
}
catch (Exception ex)
{
if (ex.Message.Contains("正由另一进程使用"))
{
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!文件正由另一个程序占用!", "提示");
}
else
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!数据量过大,请分别统计再导出!", "提示");
}
}
}不过以上代码会出现一定的bug,比如说如果GridControl的数据是取自于数据库,之后使用CustomColumnDisplayText事件的触发函数修改其中一两个字段的值后展示到界面,而使用以上的方法则导出的结果还为取自数据库的原始值,并非处理后的值。那么应当为ExportToXls函数设置导出选项。
将如下代码:
gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径替换为:
DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(DevExpress.XtraPrinting.TextExportMode.Value);
options.TextExportMode = TextExportMode.Text;//设置导出模式为文本
gridControl1.ExportToXls(fs,options);
而导出的excel文档的格式不太美观,列的宽度过短,因为这种方法是直接导出界面显示的GridControl效果,默认为表格列宽度最小值,应当对GridControl的属性进行设置:设置GridControl的OptionPrint下的AutoWidth的值为false。以上设置即可使导出的excel文件列宽自动调整,并且可以根据需要调整GridControl控件具体列在界面展示宽度即可。
public void export(GridControl gridControl1)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "Excel文件(.xls)|*.xls";
string strtype = "Excel文件名";
saveFileDialog1.FileName = strtype + DateTime.Now.ToString("yyyyMMddhhmmss");
saveFileDialog1.OverwritePrompt = false; //已存在文件是否覆盖提示
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
return;
//已存在文件是否覆盖提示
while (System.IO.File.Exists(saveFileDialog1.FileName) &&
DevExpress.XtraEditors.XtraMessageBox.Show("该文件名已存在,是否覆盖?",
"提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
if (saveFileDialog1.ShowDialog() != DialogResult.OK)
return;
}
if (saveFileDialog1.FileName != "")
{
try
{
System.IO.FileStream fs =(System.IO.FileStream)saveFileDialog1.OpenFile();
gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径
fs.Close();
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出成功!", "提示");
}
catch (Exception ex)
{
if (ex.Message.Contains("正由另一进程使用"))
{
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!文件正由另一个程序占用!", "提示");
}
else
DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!数据量过大,请分别统计再导出!", "提示");
}
}
}不过以上代码会出现一定的bug,比如说如果GridControl的数据是取自于数据库,之后使用CustomColumnDisplayText事件的触发函数修改其中一两个字段的值后展示到界面,而使用以上的方法则导出的结果还为取自数据库的原始值,并非处理后的值。那么应当为ExportToXls函数设置导出选项。
将如下代码:
gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径替换为:
DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(DevExpress.XtraPrinting.TextExportMode.Value);
options.TextExportMode = TextExportMode.Text;//设置导出模式为文本
gridControl1.ExportToXls(fs,options);
而导出的excel文档的格式不太美观,列的宽度过短,因为这种方法是直接导出界面显示的GridControl效果,默认为表格列宽度最小值,应当对GridControl的属性进行设置:设置GridControl的OptionPrint下的AutoWidth的值为false。以上设置即可使导出的excel文件列宽自动调整,并且可以根据需要调整GridControl控件具体列在界面展示宽度即可。
相关文章推荐
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- .NET使用NPOI将数据导出/导入到Excel文件介绍
- 使用PHP导入Excel和导出数据为Excel文件
- 使用UltraWebGridExcelExporter控件导出分页Grid所有数据的简单解决办法
- DevExpress-GridControl数据导出到EXCEL技术指导QQ:595789813
- 在使用 ADO.NET 导出 Excel 文件时,设置 IMEX=1 仍不能导出所有数据的解决办法
- Asp.Net MVC 使用FileResult导出Excel数据文件
- 【推荐】.NET(webform,MVC)使用NPOI组件将数据导出、导入Excel。 Aspose.Cell 控件报表
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
- Repeater控件中的数据导出为Excel或Word文件
- 直接将数据导出到Excel文件,直接操作文件没有使用Variant
- Delphi编程保存数据到Excel文件(4):使用NativeExcel2控件
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常
- 使用GridView控件导出数据源的数据为Excel、Word或Text
- Asp.Net MVC 使用FileResult导出Excel数据文件
- pb9中使用htmltable方式将数据窗口导出为excel文件的几点看法
- 使用FileResult导出Excel数据文件
- Asp.Net MVC 使用FileResult导出Excel数据文件
- C#WinForm 使用StreamWriter导出数据成Excel文件。