excel导出功能原型
本篇博客是记录自己实现的excel导出功能原型,下面我将简单介绍本原型:
这是我自制的窗体,有一个ListView和一个Button(导出)控件。
这是我在网上找到了使用exel需要引用的库。
using Microsoft.Office.Core; using Microsoft.Office.Interop.Excel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
然后我便开始了对这个原型的假设与测试,我首先把ListView中的列标题,和一行666的假数据写到ListView里面。
public void CreateHeadersAndFillListView() { //建立PSP表格的每个列标题 ColumnHeader date = new ColumnHeader(); date.Text = "日期"; date.Width = 100; listView1.Columns.Add(date); ColumnHeader categories = new ColumnHeader(); categories.Text = "类别"; categories.Width = 60; listView1.Columns.Add(categories); ColumnHeader tasks = new ColumnHeader(); tasks.Text = "任务"; tasks.Width = 180; listView1.Columns.Add(tasks); ColumnHeader startTime = new ColumnHeader(); startTime.Text = "开始时间"; startTime.Width = 60; listView1.Columns.Add(startTime); ColumnHeader endTime = new ColumnHeader(); endTime.Text = "结束时间"; endTime.Width = 60; listView1.Columns.Add(endTime); ColumnHeader intTime = new ColumnHeader(); intTime.Text = "中断时间"; intTime.Width = 60; listView1.Columns.Add(intTime); ColumnHeader deltaTime = new ColumnHeader(); deltaTime.Text = "净时间"; deltaTime.Width = 60; listView1.Columns.Add(deltaTime); ColumnHeader comment = new ColumnHeader(); comment.Text = "备注"; comment.Width = 250; listView1.Columns.Add(comment); //填入数据 lvi = new ListViewItem("666");//第0列是日期 lvi.SubItems.Add("666");//第一列是类别下拉框 lvi.SubItems.Add("666");//输入好的任务描述信息 lvi.SubItems.Add("666");//开始时间 lvi.SubItems.Add("666");//结束时间 暂时为空 lvi.SubItems.Add("666");//中断时间 lvi.SubItems.Add("666");//净时间 lvi.SubItems.Add("666");//备注信息填入 listView1.Items.Add(lvi);//添加一行 }
然后开始运行程序,此时出现以下画面:
点击导出按钮,得到excel表格,并可以选择存到指定目录下或默认路径下。
其核心代码如下:
private void button1_Click(object sender, EventArgs e) { Excelex ee = new Excelex(); ee.Create(); ee.ws = ee.AddSheet("第一周"); //循环保存写入数据 ee.SetCellValue("第一周", 1, 1, "日期"); ee.SetCellValue("第一周", 1, 2, "类别"); ee.SetCellValue("第一周", 1, 3, "任务"); ee.SetCellValue("第一周", 1, 4, "开始时间"); ee.SetCellValue("第一周", 1, 5, "结束时间"); ee.SetCellValue("第一周", 1, 6, "中断时间"); ee.SetCellValue("第一周", 1, 7, "净时间"); ee.SetCellValue("第一周", 1, 8, "备注"); for (int i = 0; i < listView1.Items.Count; i++) { for (int j = 0; j < 8; j++) { ee.SetCellValue("第一周", i + 2, j + 1, listView1.Items[i].SubItems[j].Text); } } ee.app.Visible = true;//用excel打开,显示出来。 ee.SaveAs("F:\\WPS\\newg.xls"); MessageBox.Show("保存成功!请在****查看!"); ee.Close(); }
//创建一个Microsoft.Office.Interop.Excel对象
public void Create() { app = new Microsoft.Office.Interop.Excel.Application(); wbs = app.Workbooks; wb = wbs.Add(true); }
//ws:要设值的工作表的名称 X行Y列 value 值
public void SetCellValue(string ws, int x, int y, object value) { GetSheet(ws).Cells[x, y] = value; }
//文档另存为 public bool SaveAs(object FileName) { try { wb.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); return true; } catch (Exception ex) { return false; } }