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

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

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

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


请帮帮忙吧!
...全文
609 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.
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

111,129

社区成员

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

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

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