(排班表三)导出列名不固定的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文 ...
随机推荐
- Django自定义过滤器
1.首先在在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名只能是temp ...
- Host 'XXX' is not allowed to connect to this MySQL server解决方案
如何允许远程连接mysql数据库呢,操作如下: 首先登录账号 mysql -uroot -p 使用mysql用户 use mysql 如果报此类错:ERROR 1820 (HY000): You mu ...
- 使用require.js
requirejs使用入门 什么是requirejs? RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤.可以用它来加速.优化代码,但其主要 ...
- 解决 eclipse cdt 运行时控制台乱码解决
1 点击黑色 倒三角 按钮 选择 run configurations 2 2.1 点击new 添加 LANG = en_US 2.2 选择 replace native environment wi ...
- haproxy简单配制for mysql
1:下载haproxy 官网:http://www.haproxy.org/ 下载地址:http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.ta ...
- stm32 输入捕获学习(二)
(本文参考STM32 开发指南 V1.3 -- ALIENTEK 战舰 STM32 开发板库函数教程 ) 1. 实验设计 我们用 TIM5 的通道 1(PA0)来做输入捕获,捕获 PA0 上高电 ...
- js面向对象之属性
1.属性的设置和获取,方式有两种: .和[ ] .是取自身属性 [ ]可以是变量 var obj={}; obj.name="sonia"; obj['age']=22 ...
- Geek to Live: Set up your personal Wikipedia
http://lifehacker.com/163707/geek-to-live--set-up-your-personal-wikipedia Filed to: Wikipedia Captur ...
- ASP.NET MVC 音乐商店 - 3. 视图与模型
上一篇中使用字符串,这一篇我们就开始使用视图来处理. 我们已经可以从控制器的 Action 中返回一个字符串,这可以帮助我们更好地理解 Controller 是如何工作的.但是对于创建一个 Web 程 ...
- Android学习笔记4——Activity详解
在 Android 开发过程中,与程序员打交道最多的应该就是作为四大组件之一的 Activity 了.接下来我们就一起来揭开 Activity 的神秘面纱吧~ 一.概述 什么是 Activity(活动 ...