斑竹进来!!!!!!!!!!!!!

苏楠楠 2017-10-23 03:54:22
winform页面有三个datagridview 我想把三个datagridview的数据放到一个excel里 分3个sheet,下面是我在网上找到一段代码,现在不清楚怎么样把3个datagridview放进去,求代码
 /// <summary>  
/// 多个dataGirdView导出到同一个excel的多个sheet当中
/// </summary>
/// <param name="myDics">一个装载多个datagirdview的集合</param>
public static void setMoreExcelSheet(Dictionary<string, DataGridView> myDics)
{
string fileName = "";
Microsoft.Office.Interop.Excel.Application excel = null;
//选择创建文件的路径
SaveFileDialog save = new SaveFileDialog();
save.Filter = "excel files(*.xls)|*.xls";
save.Title = @"C:\AutoTestTool";
save.FileName = "all_" + DateTime.Now.ToString("yyyyMMddHHmmss");
if (save.ShowDialog() == DialogResult.OK)
{
fileName = save.FileName;
//MessageBox.Show(save.FileName);
// 创建Excel对象
excel = new Microsoft.Office.Interop.Excel.Application();
if (excel == null)
{
MessageBox.Show("Excel无法启动", "提示");
return;
}
}
else
{
return;
}
Microsoft.Office.Interop.Excel.Workbook excelBook = null;
Microsoft.Office.Interop.Excel.Worksheet excelSheet = null;

//创建Excel工作薄
excelBook = excel.Workbooks.Add(true);
foreach (KeyValuePair<string, DataGridView> kvp in myDics)
{
DataGridView dataGridView = kvp.Value;
string name = kvp.Key;

Console.WriteLine("Key = {0}, Value = {1}", name, dataGridView);



//总可见列数,总可见行数
int colCount = dataGridView.Columns.GetColumnCount(DataGridViewElementStates.Visible);
int rowCount = dataGridView.Rows.GetRowCount(DataGridViewElementStates.Visible);
//dataGridView 没有数据提示
if (dataGridView.Rows.Count == 0 || rowCount == 0)
{
MessageBox.Show("表中没有数据", "提示");
}
else
{
if (null == excelSheet)
{
excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];
excelSheet.Name = name;

}
else
{
//expression.Add(Before, After, Count, Type)
//expression : 必需。该表达式返回上面的对象之一。
//Before : Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之前。
//After : Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之后。
//Count : Variant 类型,可选。要新建的工作表的数目。默认值为 1。
//Type : Variant 类型,可选。指定工作表类型。
excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets.Add(Type.Missing,
excelSheet, 1, Type.Missing);
excelSheet.Name = name;
}

//生成字段名称
int k = 0;
for (int i = 0; i < dataGridView.ColumnCount; i++)
{
if (dataGridView.Columns[i].Visible) //不导出隐藏的列
{
excel.Cells[1, k + 1] = dataGridView.Columns[i].HeaderText;
k++;
}
}
//填充数据
for (int i = 0; i < dataGridView.RowCount; i++)
{
k = 0;
for (int j = 0; j < dataGridView.ColumnCount; j++)
{
if (dataGridView.Columns[j].Visible) //不导出隐藏的列
{
if (dataGridView[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, k + 1] = "" + dataGridView[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, k + 1] = dataGridView[j, i].Value.ToString();
}
}
k++;
}
}
}
}


try
{
excelBook.Saved = true;
excelBook.SaveCopyAs(fileName);


excelBook.Close(true);
excel.Quit();
releaseObject(excelSheet);
releaseObject(excelBook);
releaseObject(excel);
}
catch
{
MessageBox.Show("导出失败,文件可能正在使用中", "提示");
}


}

...全文
291 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏楠楠 2017-10-24
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
/// <param name="myDics">一个装载多个datagirdview的集合</param> -》注释的很清楚。 现在不清楚怎么样把3个datagridview放进去 -》那你连什么是集合都不清楚了这是。setMoreExcelSheet(Dictionary<string, DataGridView> myDics) 中的参数 myDics 就是一个字典集合。 你必须初始化一个Dictionary集合变量,key值为sheet页名称,value 是你的datagridview名称,再把这个集合变量传进到方法中即可。
斑竹大人,你说的我懂了,谢谢. 但是把集合变量传进到方法中我还是不知道怎么写,能帮忙写一段吗? 我是小白
苏楠楠 2017-10-24
  • 打赏
  • 举报
回复
有人帮忙吗?
exception92 2017-10-23
  • 打赏
  • 举报
回复
http://csharp.net-informations.com/file/csharp-directory-class.htm 这上边几乎都是基础,有时间学一下。
exception92 2017-10-23
  • 打赏
  • 举报
回复
/// <param name="myDics">一个装载多个datagirdview的集合</param> -》注释的很清楚。 现在不清楚怎么样把3个datagridview放进去 -》那你连什么是集合都不清楚了这是。setMoreExcelSheet(Dictionary<string, DataGridView> myDics) 中的参数 myDics 就是一个字典集合。 你必须初始化一个Dictionary集合变量,key值为sheet页名称,value 是你的datagridview名称,再把这个集合变量传进到方法中即可。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧