将班表信息导出Excel表格保存到本地

要求:文档名称为【XXXX】年X月值班表

文档显示的效果:

实现代码:

 //导出Excel值班表
private void btn_export_1_Click(object sender, RoutedEventArgs e)
{
try
{
//表格数据源为空是不执行导出操作
if (ltDataSchedule == null || ltDataSchedule.Count() <= ) return; //获取选择的年和月份
int select_year = rcb_year.SelectedItem == null ? DateTime.Now.Year : Convert.ToInt32((rcb_year.SelectedItem as RadComboBoxItem).Tag);
int select_month = rcb_month.SelectedItem == null ? DateTime.Now.Month : Convert.ToInt32((rcb_month.SelectedItem as RadComboBoxItem).Tag); string title = select_year + "年" + select_month + "月值班表"; SaveFileDialog dialog = new SaveFileDialog();
dialog.DefaultExt = "xls";
dialog.Filter = "Excel文件(.xls)|*.xls";
dialog.FilterIndex = ;
dialog.DefaultFileName = title;
if (dialog.ShowDialog() == true)
{
using (Stream stream = dialog.OpenFile())
{
XlsDocument xls = new XlsDocument(); //新建一个xls文档
Worksheet sheet = xls.Workbook.Worksheets.Add(title);//填加名为"第一个Sheet Demo"的sheet页
//表格列数
for (int i = ; i <= totalDays; i++)
{
ColumnInfo conlInfo = new ColumnInfo(xls, sheet);
conlInfo.ColumnIndexStart = (ushort)i;
conlInfo.ColumnIndexEnd = (ushort)i;
conlInfo.Width = * ; // 列的宽度计量单位为 1/256 字符宽
sheet.AddColumnInfo(conlInfo);
}
Cells cells = sheet.Cells; #region 创建单元格样式
//标题:文字垂直水平居中、加粗
XF xfTitle = xls.NewXF();
xfTitle.Font.Bold = true; // 是否加粗
xfTitle.Font.Weight = org.in2bits.MyXls.FontWeight.ExtraBold;// 字体宽度
xfTitle.Font.Height = ;// 设定字大小 //表头样式
XF xf_head = xls.NewXF();
xf_head.Font.Bold = true;
xf_head.Font.Weight = org.in2bits.MyXls.FontWeight.ExtraBold;
xf_head.HorizontalAlignment = HorizontalAlignments.Centered;// 设定文字居中
xf_head.VerticalAlignment = VerticalAlignments.Centered;// 垂直居中
xf_head.Font.Height = ;
xf_head.VerticalAlignment = VerticalAlignments.Centered;
xf_head.Font.FontName = "仿宋"; //内容样式
XF xf = xls.NewXF();
xf.HorizontalAlignment = HorizontalAlignments.Centered;// 设定文字居中
xf.VerticalAlignment = VerticalAlignments.Centered;// 垂直居中
xf.TextWrapRight = false;
xf.Font.Height = ;
#endregion
#region 填充第一行的列标题
//标题
MergeArea maTitle = new MergeArea(, , , totalDays + );// 先行后列:合并单元格(合并第1行、第1列 到 第1行、第13列)
sheet.AddMergeArea(maTitle);
cells.Add(, , title, xfTitle);
//姓名
MergeArea maorg1 = new MergeArea(, , , );
sheet.AddMergeArea(maorg1);
cells.Add(, , "姓名", xf_head); for (int i = ; i <= totalDays; i++)
{
MergeArea maorg = new MergeArea(, , i + , i + );
sheet.AddMergeArea(maorg);
DateTime dtime = Convert.ToDateTime(select_year + "-" + select_month + "-" + i);
string cols = i + "号/" + week_str[Convert.ToInt16(dtime.DayOfWeek)];
cells.Add(, i + , cols, xf_head);
}
#endregion
#region 循环数据源 逐行添加数据 for (int i = ; i < ltDataSchedule.Count(); i++)
{
int StatRow = i + ;//从表格的第三行开始添加数据
for (int k = ; k <= totalDays; k++)
{
#region 填充列值
if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].name, xf); //给单元格赋值:行,列,列值,单元格样式
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day1, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day2, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day3, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day4, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day5, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day6, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day7, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day8, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day9, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day10, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day11, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day12, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day13, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day14, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day15, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day16, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day17, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day18, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day19, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day20, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day21, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day22, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day23, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day24, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day25, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day26, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day27, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day28, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day29, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day30, xf);
else if (k == )
sheet.Cells.Add(StatRow, k + , ltDataSchedule[i].day31, xf);
else { sheet.Cells.Add(StatRow, k + , "", xf); }
#endregion
}
}
#endregion
xls.Save(stream);
}
MessageBox.Show("导出成功");
}
}
catch (Exception ex)
{
RadWindow.Alert(ex.Message);
}
}

导出表格

(排班表三)导出列名不固定的Grid表格到Excel的更多相关文章

  1. (排班表二)后台动态绘制Grid表格

    后台动态绘制值班表(Grid表格 列名不固定) 要求:表头除了值班人姓名,还要显示日期,及每天的星期值,用斜杠‘/’分隔.即:几号/星期几 最终实现的效果:根据查询的年月显示每个值班人查询月份每天的值 ...

  2. 使用SQL语句使数据从坚向排列转化成横向排列(排班表)

    知识重点: 1.extract(day from schedule01::timestamp)=13 Extract 属于 SQL 的 DML(即数据库管理语言)函数,同样,InterBase 也支持 ...

  3. (排班表一)使用SQL语句使数据从坚向排列转化成横向排列

    知识重点: 1.extract(day from schedule01::timestamp)=13 Extract 属于 SQL 的 DML(即数据库管理语言)函数,同样,InterBase 也支持 ...

  4. [ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel

    使用extjs肯定少不了使用表格控件,用到表格,领导们(一般)还是惯于使用excel看数据,所以用到extjs表格的技术猿们肯定也会有导出表格excel这一个需求,本文主要针对如何在用extjs将gr ...

  5. 翻翻git之---可用作课程表/排班表的自定义table库ScrollTableView

    转载请注明出处:王亟亟的大牛之路 最近一直在写混合开发的东西,是时候温故下native的了. 一年多之前领导提了一个双性滚动+快点击的"TableView"那时候自己整了2 3天没 ...

  6. c++实现医院检验科排班程序

    c++实现医院检验科排班程序 1.背景: 医院急诊检验科24h×7×365值班.工作人员固定.採取轮班制度.确保24h都有人值班. 本文就通过C++实现编敲代码自己主动排班,并能够转为Excel打印. ...

  7. Javascript:日期排班功能实现

     背景: 近期,公司的产品经常会遇到日期排班类似的功能: 需求的排班日期长短不一:有些是两周,有些是四周:要求选中的时候有一个active的状态区分,另外要提供钩子获取选中日期的形如:[2018-04 ...

  8. 使用.NET Core与Google Optimization Tools实现员工排班计划Scheduling

    上一篇说完<Google Optimization Tools介绍>,让大家初步了解了Google Optimization Tools是一款约束求解(CP)的高效套件.那么我们用.NET ...

  9. JPA中自动使用@Table(name = "userTab")后自动将表名、列名添加了下划线的问题

    一.问题 JPA中自动使用@Table(name = "userTab")后自动将表名.列名添加了下划线的问题,如下图: 二.解决 在application.properties文 ...

随机推荐

  1. Java基础10-循日历制作

    编写过程:先指定固定的年份来输出指定月份的日历 /*计算1900年1月1日到2018年11月1日一共有多少天 计算月份 对7进行取模,结果就为星期几 */ import java.util.Scann ...

  2. BaseAdapter,SimpleAdapter,CursorAdapter的用法

    简单好用的Adapter---ArrayAdapter ArrayAdapter是BaseAdapter的派生类,在BaseAdapter的基础上,添加了一项重大的功能:可以直接使用泛型构造. 我们先 ...

  3. Keepalived & Lvs集群搭建实验

    实验拓扑图: 实验原理: Keepalived 是基于 LVS ,并与 LVS 高度融合的 LVS和keepalived的关系:lvs起的是负载均衡功能,而keepalived则是高可用(热 备)的支 ...

  4. (转)总结Linux的chattr与lsattr命令详解

    PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的li ...

  5. Spring Boot(一)Hello World

    Spring Boot适合与微服务,方便快速开发,简化配置(约定>配置). 准备工作: SpringBoot 2.0 jdk8 IDEA或者eclipse+Spring Tool Suits 创 ...

  6. Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释

    遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,seria ...

  7. 给主程序签名及第三方dll强签名

    给主程序添加签名   添加完成后会自动生成一个*.pfx文件.     给程序添加强签名方法:   本文以Quartz.dll为例,使用vs Tools下的工具命令.   打开命令工具是这个样子,   ...

  8. SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误

    今天SqlServer 2008连接数据库时报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误.在连接到 SQL Server 2008 时,在默认的设置下 SQL Server 不允许远程 ...

  9. The fifth day

    All men cannot be first . 今日单词: first(形容词):第一的:基本的:最早的:(副词):第一:首先 翻译:不可能人人都是第一名. <Only Love>-- ...

  10. django choice字段模板展示

    class UserInfo(AbstractUserInfo): """ 用户表 """ gender_choice = ( (1,&qu ...