(排班表三)导出列名不固定的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文 ...
随机推荐
- 云计算&大数据相关知识
1.极客学院云计算&大数据总链接:http://wiki.jikexueyuan.com/list/cloud/ 一.NSQ相关参考资料: 1.极客学院NSQ指南:http://wiki.ji ...
- C# 图像快速转化成byte[]和计算像素值
public static unsafe byte[] ConvertTo8Byte(Bitmap img) { byte[] result = new byte[img.Width * img.He ...
- Swift-取消传统For循环
1.取消传统的For循环 传统的for,在swift 3.0 被取消 i++/++i在swift 3.0 被取消 i += 1代替 for var i = 0;i<10;i +=1 { } 2. ...
- 软件测试技术第三次作业——打印质数printPrimes()
作业一.Use the following method printPrimes() for questions a–d. printPrimes: /** ********************* ...
- one + two = 3
读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出. 输入 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =", ...
- python面试题——前端(23题)
2.谈谈你对websocket协议的认识. 3.什么是magic string ? 4.如何创建响应式布局? 5.你曾经使用过哪些前端框架? 6.什么是ajax请求?并使用jQuery和XMLHttp ...
- 微信小程序电商实战-商品列表流式布局
今天给大家分享一下微信小程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~ 流式布局概念 流式布局也叫百分比布局 把元素的宽,高,margin,padding不再用固定数值,改用百分 ...
- Vim 新手节省时间的小技巧
1. 不关闭终端退出编辑器 使用 Vim 编辑器保存并退出编辑状态是一件轻而易举的事,你只需记住按 ESC 键切换到正常模式,然后输入冒号(:),之后输入 wq 即可实现保存并退出. :wq 如果不想 ...
- 利用Excel导入数据到SAP C4C
假设要导入一个Account数据到C4C系统. 工作中心Data Workbench,工作中心视图Import,点download metadata: 会下载一个压缩包到本地. 进入文件夹Templa ...
- 【BZOJ3506】[CQOI2014] 排序机械臂(Splay)
点此看题面 大致题意: 给你\(n\)个数.第一次找到最小值所在位置\(P_1\),翻转\([1,P_1]\),第二次找到剩余数中最小值所在位置\(P_2\),翻转\([2,P_2]\),以此类推.求 ...