(排班表三)导出列名不固定的Grid表格到Excel
将班表信息导出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的更多相关文章
- (排班表二)后台动态绘制Grid表格
后台动态绘制值班表(Grid表格 列名不固定) 要求:表头除了值班人姓名,还要显示日期,及每天的星期值,用斜杠‘/’分隔.即:几号/星期几 最终实现的效果:根据查询的年月显示每个值班人查询月份每天的值 ...
- 使用SQL语句使数据从坚向排列转化成横向排列(排班表)
知识重点: 1.extract(day from schedule01::timestamp)=13 Extract 属于 SQL 的 DML(即数据库管理语言)函数,同样,InterBase 也支持 ...
- (排班表一)使用SQL语句使数据从坚向排列转化成横向排列
知识重点: 1.extract(day from schedule01::timestamp)=13 Extract 属于 SQL 的 DML(即数据库管理语言)函数,同样,InterBase 也支持 ...
- [ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel
使用extjs肯定少不了使用表格控件,用到表格,领导们(一般)还是惯于使用excel看数据,所以用到extjs表格的技术猿们肯定也会有导出表格excel这一个需求,本文主要针对如何在用extjs将gr ...
- 翻翻git之---可用作课程表/排班表的自定义table库ScrollTableView
转载请注明出处:王亟亟的大牛之路 最近一直在写混合开发的东西,是时候温故下native的了. 一年多之前领导提了一个双性滚动+快点击的"TableView"那时候自己整了2 3天没 ...
- c++实现医院检验科排班程序
c++实现医院检验科排班程序 1.背景: 医院急诊检验科24h×7×365值班.工作人员固定.採取轮班制度.确保24h都有人值班. 本文就通过C++实现编敲代码自己主动排班,并能够转为Excel打印. ...
- Javascript:日期排班功能实现
背景: 近期,公司的产品经常会遇到日期排班类似的功能: 需求的排班日期长短不一:有些是两周,有些是四周:要求选中的时候有一个active的状态区分,另外要提供钩子获取选中日期的形如:[2018-04 ...
- 使用.NET Core与Google Optimization Tools实现员工排班计划Scheduling
上一篇说完<Google Optimization Tools介绍>,让大家初步了解了Google Optimization Tools是一款约束求解(CP)的高效套件.那么我们用.NET ...
- JPA中自动使用@Table(name = "userTab")后自动将表名、列名添加了下划线的问题
一.问题 JPA中自动使用@Table(name = "userTab")后自动将表名.列名添加了下划线的问题,如下图: 二.解决 在application.properties文 ...
随机推荐
- 性能测试工具LoadRunner20-LR之Controller Service-Level Agreement(服务水平协议)
SLA是为负载测试场景定义的具体目标.例如,评测脚本中任意数量事务的平均响应时间,可以定义具体的目标或阈值.测试运行结束之后,LR将你定义的目标与实际录制的平均事务响应时间进行比较.如果实际的平均事务 ...
- [转]理解js中的原型链,prototype与__proto__的关系
本文转自:http://rockyuse.iteye.com/blog/1426510 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script typ ...
- maven 如何将自己的jar包添加到本地仓库
1 准备一个需要添加到本地仓库的jar包 我这里准备了一个名为mail.jar 的jar包,放到E:\Install Files目录下面 2 下面演示如何将准备的jar包添加到本地仓库 1 语法 mv ...
- codeblocks 控制台输出乱码
解决办法如图 如果你和我用的一样是kde环境 把Terminal to launch console programs那个选项改成 上图 konsole -e 如果你用的是gnome环境 ...
- TP扩展Xxtea.class.php加密解密函数用法
http://www.coolcode.org/?action=show&id=128这里可以查到一个相关文章. 附上xiunobbs里的代码,自己加了点注释,欢迎大牛批评指正 //将数值数组 ...
- PHP substr()函数
PHP substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法 ...
- 我的2015plan
工作(熟悉业务流程,知道来龙去脉,提出改进优化,争取p6) 技术(读1个开源代码.多线程.网络编程) 技术类书籍(c++.python得深入) 读书(历史.经济.传记类) 状态(融入.投入.高效.平衡 ...
- jQuery中的节点操作(一)
html代码如下 <p>Dom操作练习</p> jQuery插入节点 $("p").append("武汉php"); //向每个匹配的元 ...
- 轻松完成excel读写操作- 基于POI的框架BingExcel的使用(2)
在进行 类转换时候,系统默认注册了一些转换器,当然你也可以自定局部或者全局的转换器.下面进行具体使用说明 java类说明 对应的java实体类,其属性必须要有__@CellConfig__注解,此注 ...
- python数据类型和数据运算
数字 整型 包括正整数和负整数,和数学的表示方法一样.如:1.100.8008.-12等. 浮点型 浮点数字也称为小数,如果按照科学计数法表示时,小数点的位置是可变的.如:1.23x109==12.3 ...