C# 在office2007 gridview导出到excel
2012-04-26 10:38
393 查看
浪费了一个多小时来做个工作 现在把过程整理一下 大家以后遇到就不用麻烦了
我过一会把源代码整理一份发到我的共享里边 有用的自己去找吧 不要分的 还是要一分吧
还有一个问题需要补充一下 在office 2007下可能会有
我过一会把源代码整理一份发到我的共享里边 有用的自己去找吧 不要分的 还是要一分吧
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; using System.Data.SqlClient; namespace DataToExcel { public partial class Form1 : Form { public Form1() { InitializeComponent(); } class ExportExcel { /// <summary> /// 将DataGridView中的数据导出到Excel中,并加载显示出来(无加载模板) /// 只用于一般的导出Excel /// </summary> /// <param name="caption">要显示的页头</param> /// <param name="date">打印日期</param> /// <param name="dgv">要进行导出的DataGridView</param> public void ExportToExcel(string caption, string date, DataGridView dgv) { //DataGridView可见列数 int visiblecolumncount = 0; for (int i = 0; i < dgv.Columns.Count; i++) { if (dgv.Columns[i].Visible == true && (dgv.Columns[i] is DataGridViewTextBoxColumn)) { visiblecolumncount++; } } try { //当前操作列的索引 int currentcolumnindex = 1; //当前操作行的索引 Microsoft.Office.Interop.Excel.ApplicationClass Mylxls = new Excel.ApplicationClass(); Mylxls.Application.Workbooks.Add(true); //Mylxls.Cells.Font.Size = 10.5; //设置默认字体大小 //设置标头 Mylxls.Caption = caption; //显示表头 Mylxls.Cells[1, 1] = caption; //显示时间 Mylxls.Cells[2, 1] = date; for (int i = 0; i < dgv.Columns.Count; i++) { if (dgv.Columns[i].Visible == true && (dgv.Columns[i] is DataGridViewTextBoxColumn)) //如果显示 { Mylxls.Cells[3, currentcolumnindex] = dgv.Columns[i].HeaderText; Mylxls.get_Range(Mylxls.Cells[3, currentcolumnindex], Mylxls.Cells[3, currentcolumnindex]).Cells.Borders.LineStyle = 1; //设置边框 Mylxls.get_Range(Mylxls.Cells[3, currentcolumnindex], Mylxls.Cells[3, currentcolumnindex]).ColumnWidth = dgv.Columns[i].Width / 8; //Mylxls.get_Range(Mylxls.Cells[3, currentcolumnindex], Mylxls.Cells[3, currentcolumnindex]).Font.Bold = true; //粗体 //Mylxls.get_Range(Mylxls.Cells[3, currentcolumnindex], Mylxls.Cells[3, currentcolumnindex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //居中显示 currentcolumnindex++; } } Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, visiblecolumncount]).MergeCells = true; //合并单元格 Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).RowHeight = 30; //行高 //Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Name = "黑体"; //Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Size = 14; //字体大小 Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, visiblecolumncount]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //居中显示 Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 2]).MergeCells = true; //合并 Mylxls.get_Range(Mylxls.Cells[2, 1], Mylxls.Cells[2, 2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft; //左边显示 //Mylxls.get_Range(Mylxls.Cells[1, 2], Mylxls.Cells[1, 2]).ColumnWidth = 12; //列宽度 object[,] dataArray = new object[dgv.Rows.Count, visiblecolumncount]; //当前操作列的索引 //int currentcolumnindex = 1; //当前操作行的索引 for (int i = 0; i < dgv.Rows.Count; i++) //循环填充数据 { currentcolumnindex = 1; for (int j = 0; j < dgv.Columns.Count; j++) { if (dgv.Columns[j].Visible == true && (dgv.Columns[j] is DataGridViewTextBoxColumn)) { if (dgv[j, i].Value != null) //如果单元格内容不为空 { dataArray[i, currentcolumnindex - 1] = dgv[j, i].Value.ToString(); } currentcolumnindex++; } } } Mylxls.get_Range(Mylxls.Cells[4, 1], Mylxls.Cells[dgv.Rows.Count + 3, visiblecolumncount]).Value2 = dataArray; //设置边框 Mylxls.get_Range(Mylxls.Cells[4, 1], Mylxls.Cells[dgv.Rows.Count + 3, visiblecolumncount]).Cells.Borders.LineStyle = 1; //设置边框 Mylxls.Visible = true; } catch { MessageBox.Show("信息导出失败,请确认你的机器上装有Microsoft Office Excel 2003!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { } } } private void Form1_Load(object sender, EventArgs e) { //select v.sell_user_manager_name as 管理单位,v.sell_user_area_name as 地区,v.sell_user_name as 销售用户名,v.sell_station_name as 场站名,v.sell_user_name_line as 管道用户名,isnull(s.press_avg,0) as 平均压力,isnull(s.sell_day_data,0) as 日实际供气量,isnull(s.sell_month_data,0) as 月累计供气量,isnull(s.sell_year_data,0) as 年累计供气量 ,isnull(s.sell_data_get_type,'手工录入') as 数据采集方式,s.condition as 计量状态,s.remarks as 备注 from sell_user_info_detail_view v left join sell_data s on v.sell_line_id =s.sell_line_id_d and datediff(dd,s.sell_date_time_Start,getdate())=1 order by v.sell_user_manager_name"; SqlConnection conn = new SqlConnection(); conn.ConnectionString = "server=10.18.2.87,81;database=Natural_Gas_Monitor;user id =xnyqfgs;password=xnyqfgs"; try { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "select v.sell_user_manager_name as 管理单位,v.sell_user_area_name as 地区,v.sell_user_name as 销售用户名,v.sell_station_name as 场站名,v.sell_user_name_line as 管道用户名,isnull(s.press_avg,0) as 平均压力,isnull(s.sell_day_data,0) as 日实际供气量,isnull(s.sell_month_data,0) as 月累计供气量,isnull(s.sell_year_data,0) as 年累计供气量 ,isnull(s.sell_data_get_type,'手工录入') as 数据采集方式,s.condition as 计量状态,s.remarks as 备注 from sell_user_info_detail_view v left join sell_data s on v.sell_line_id =s.sell_line_id_d and datediff(dd,s.sell_date_time_Start,getdate())=1 order by v.sell_user_manager_name"; SqlDataAdapter sda = new SqlDataAdapter(cmd); DataSet ds = new System.Data.DataSet(); sda.Fill(ds); this.dataGridView1.DataSource = ds.Tables[0]; } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { conn.Close(); } } private void button1_Click(object sender, EventArgs e) { ExportExcel ee = new ExportExcel(); ee.ExportToExcel("数据导出",DateTime.Now.ToString("yyyy-MM-dd"),this.dataGridView1); } } }
还有一个问题需要补充一下 在office 2007下可能会有
using Excel = Microsoft.Office.Interop.Excel; 使用问题
这个时候需要在vs下更改excel的属性 把可交互性改成false
相关文章推荐
- 解决C# 导出gridview中的数据到excel 时, 全数字时 0 被去掉的问题
- C#中关于导出GridView数据到Excel
- c# GridView导出Excel (包括GridView在ascx上的情况如何导出)
- C#GridView控件导出Excel及多层表头类
- C#导出GridView数据到Excel文件类实例
- WinForm c# GridView导出Excel
- 【Vegas原创】GridView修改表头,并导出Excel(C#版)
- 【Vegas原创】GridView修改表头,并导出Excel(C#版)
- c# web gridview导出到excel
- C# asp.net 把GridView数据 导出到 Excel
- 【Vegas原创】GridView修改表头,并导出Excel(C#版)
- [C#] GridView导出到Excel
- C# 将GridView导出为Excel注意事项
- GridView修改表头,并导出Excel(C#版)
- C#实现GridView导出Excel实例代码
- C# .Net 后台导出Excel方法(GridView、table或者DataTable)
- C# ASP.NET GridView导出EXCEL。
- C#编写GridView导出EXCEL
- C# ASP.net 将GridView中的数据导出到Excel中的代码
- C# GridView导出excel,字段值前边带0的,导出后不显示0的解决方法