DataGridView所有分页数据一次性导出为Excel

jsafe 2011-05-17 04:11:20
我用到(工具vs2005, 语言c#, 数据库sql2005)

我现在遇到的问题是:DataGridView 分页后不能导出全部数据。

现在只能实现导出DataGridView当前页的数据,我想实现的是在保留分页的情况下,一次性导出全部数据为Excel。


请帮帮忙吧!
...全文
535 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
熙风 2012-08-01
  • 打赏
  • 举报
回复
public static void ExportNotPassProduct(DataTable table, string templetPath, string savePath)
{
File.Copy(templetPath, savePath, true);//templetPath、模板地址,savePath、保存路径
_Excel.Application app = new _Excel.ApplicationClass();
app.Visible = false;
_Excel.Workbook book = app.Workbooks.Open(savePath, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
_Excel.Worksheet sheet = (_Excel.Worksheet)book.ActiveSheet;
sheet.Columns.Font.Size = 11;
sheet.Columns.Font.Name = "Arial Unicode MS";
sheet.Columns.WrapText = true;
sheet.Rows.WrapText = true; //自动换行
sheet.Rows.EntireRow.AutoFit(); //行高根据内容自动调整
sheet.Columns.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
_Excel.Range rang = null;
for (int j = 0; j < table.Columns.Count; j++)
{
for (int row = 0; row < table.Rows.Count; row++)
{
sheet.Cells[row + 2, j + 1] = table.Rows[row][j].ToString();
}
}
sheet.get_Range("a1", "l" + (table.Rows.Count+1) + "").Borders.LineStyle = BorderStyle.FixedSingle;
sheet.get_Range("a1", "l" + (table.Rows.Count+1) + "").Font.Name = "Times New Roman";
System.Windows.Forms.Application.DoEvents();
sheet = null;
book.Save();
book.Close(sheet, savePath, System.Type.Missing);
app.Quit();
System.GC.Collect();
KillProcess(app);
}


/// <summary>
/// 导出Excel后,杀死Excel进程
/// </summary>
/// <param name="app"></param>
private static void KillProcess(_Excel.Application app)
{
IntPtr t = new IntPtr(app.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}


参考 http://blog.csdn.net/happy09li/article/details/7431967
cuiwenjun57 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我用到(工具vs2005, 语言c#, 数据库sql2005)

我现在遇到的问题是:DataGridView 分页后不能导出全部数据。

现在只能实现导出DataGridView当前页的数据,我想实现的是在保留分页的情况下,一次性导出全部数据为Excel。


请帮帮忙吧!
[/Quote]
楼主能把《实现导出DataGridView当前页的数据》这个代码给分享不?我最近在做?
急需!!十分感谢!!
sharonyshi 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gefangliang 的回复:]
C# code

/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
private DataTable GetData()
{
System.Data.DataTable dtExcel = new Dat……
[/Quote]
请问。怎么导出呢?我写了一个button,点击按钮执行GetData(),可是不知道excel表在哪里。。。
sharonyshi 2011-06-05
  • 打赏
  • 举报
回复
多谢楼上哈。。。
jsafe 2011-06-05
  • 打赏
  • 举报
回复
祝大家端午节快乐!
kingdom_0 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 poloyzhang 的回复:]

可以从dataset 中导出来.通过dataset 导出为excel.
[/Quote]正解。
如果你是分页从数据库中查询出来的,那你就还得再查询一次数据库。将所有的数据都导出到DataSet,之后导出到Excel当中。
心灵彩虹 2011-05-17
  • 打赏
  • 举报
回复

/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
private DataTable GetData()
{
System.Data.DataTable dtExcel = new DataTable();
//添加dtExcel列
dtExcel.Columns.Add("名称", typeof(string));
dtExcel.Columns.Add("件数", typeof(int));
dtExcel.Columns.Add("数量", typeof(int));
dtExcel.Columns.Add("单价", typeof(decimal));
dtExcel.Columns.Add("金额", typeof(decimal));
for (int colNum = 0; colNum < dgvITList.Rows.Count - 1; colNum++)
{
DataRow dr = dtExcel.NewRow();
//将datagridview中某行某列的值添加到字段中
dr["名称"] = dgvITList.Rows[colNum].Cells["Column3"].Value;
if (dgvITList.Columns["Group1"].Visible == true && dgvITList.Rows[colNum].Cells["Group1"].Value != null)
{

dr["件数"] = ComLibrary.ToInt(dgvITList.Rows[colNum].Cells["Group1"].Value);
}
else
{
dr["件数"] = 0;
}
dr["数量"] = dgvITList.Rows[colNum].Cells["Number"].Value.ToString().Replace(",", "");
dr["单价"] = dgvITList.Rows[colNum].Cells["colRealPrice"].Value.ToString().Replace(",", "");
dr["金额"] = dgvITList.Rows[colNum].Cells["Column17"].Value.ToString().Replace(",", "");
dtExcel.Rows.Add(dr);//将dgvITList的一行添加到dtExcel的行中
}
return dtExcel;
}

将数据放到dataset或者datatable中,然后导出就行了。
poloyzhang 2011-05-17
  • 打赏
  • 举报
回复
可以从dataset 中导出来.通过dataset 导出为excel.

110,476

社区成员

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

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

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