前言:
在研究了一天的datagridview之后,又继续研究了将datagridview中的内容导入到excel表的全部代码之后,终于柳暗花明!接下来和我一起来学习吧!
1、因为好多的窗体都会用到将数据导出到Excel,所以,我在UI层建了一个专门用来导数据的类
using System.Data;
using System.Windows.Forms;
namespace UI
{
public class ExportExcel
{
public void RExcel(string name, DataGridView dgv)
{
//总可见行数,总可见列数
int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible);
int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible);
//判断有没有数据
if (dgv.Rows.Count==0||rowCount==0)
{
MessageBox.Show("表中没有数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
SaveFileDialog save = new SaveFileDialog();//用来提示用户保存文件的位置
save.Filter = "excel files(*.xlsx)|*.xlsx";//获取当前文件筛选器字符串,filter为过滤的意思,表示用户存储的文件类型,对应的是保存类型
save.Title = "请选择要导出数据的位置";//设置文件对话框的标题
save.FileName = name + DateTime.Now.ToLongDateString();//保存文件名字
//如果运行了对话框
if (save.ShowDialog()==DialogResult.OK) //对话框中的返回值是 OK (通常从一个标有确定按钮发送)。
{
string fileName = save.FileName;
//创建Excel对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
if (excel==null)
{
c
}
//创建Excel工作簿
Microsoft.Office.Interop.Excel.Workbook excelBook = excel.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Worksheet wxcelsheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];
//生成字段名称
int K = 0;
for (int i = 0; i < dgv.ColumnCount; i++)
{
if (dgv.Columns[i].Visible)//不导出隐藏的列
{
excel.Cells[1, K + 1] = dgv.Columns[i].HeaderText;//标题
K++;
}
}
for (int i = 0; i < dgv.RowCount; i++)
{
K = 0;
for (int j = 0; j < dgv.ColumnCount; j++)
{
if (dgv.Columns[j].Visible)//不导出隐藏的列
{
excel.Cells[i+2,K+1]= dgv[j, i].Value.ToString(); //内容
}
K++;
}
}
try
{
excelBook.Saved = true;
excelBook.SaveCopyAs(fileName);//保存的副本
MessageBox.Show("导出成功!");
}
catch
{
MessageBox.Show("导出失败,文件可能正在使用中" ,"提示");
}
}
}
}
}
}
调用时的代码
private void btnExcel_Click(object sender, EventArgs e)//导出EXCEl按钮
{
string name = "李光 ";
ExportExcel ex = new ExportExcel();
ex.RExcel(name, dataGridView);
}
图片解释部分代码:
SaveFileDialog save = new SaveFileDialog();//用来提示用户保存文件的位置,一个框
save.Filter = "excel files(*.xlsx)|*.xlsx";//获取当前文件筛选器字符串,filter为过滤的意思,表示用户存储的文件类型,对应的是保存类型
save.Title = "请选择要导出数据的位置";//设置文件对话框的标题
save.FileName = name + DateTime.Now.ToLongDateString();//保存文件名字
if (save.ShowDialog()==DialogResult.OK) //对话框中的返回值是 OK (通常从一个标有确定按钮发送)
图片都是代码对应的位置,在这里补充一下DialogResult枚举类,共有如下成员!
可以和messageBox相互结合使用!
后记
向接口那些东西,理解的比较粗浅,在这里,特别大的感受就是,多看帮助文档MSDN,这太有用了,也正验证了米老师的那句话,多看帮助,少走弯路!