将班表信息导出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实现总结

    public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:&q ...

  2. NASM在Ubuntu上的安装与简单使用

    一 .安装NASM 1. 下载安装文件 地址是:http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/ 2.解压(具体命令要根据压缩包的类型来选用) 3. ...

  3. 转-Shell笔记——命令:Sort,uniq,join,cut,paste,split

    转自:http://blog.csdn.net/wklken/article/details/6562098 Sort,uniq,join,cut,paste,split 命令—— Sort Sort ...

  4. HDU 5592——ZYB's Premutation——————【线段树单点更新、单点查询】

    ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  5. SpringBoot如何集成Jedis

    添加jedis依赖 在项目pom.xml文件中添加依赖 <!-- 添加jedis依赖 --> <dependency> <groupId>redis.clients ...

  6. DJ轮回舞曲网下载教程

    该网站网址为:http://www.92cc.com/ 昨天有网友问我这个网站能不能下载.我告诉他,只要能在线试听的就能下载 于是今天出个临时教程 教大家如何获取试听的音乐URL. 第一步找到试听的网 ...

  7. webConfig中<customErrors>节点配置

    发布在远程计算机上的网站调试问题: 通常情况下我们会设置错误页,不让用户看到错误信息 这种WebConfig的配置方法是: <configuration> <system.web&g ...

  8. 2.C#中的常用快捷键

    快速对齐代码: Ctrl+K+D:  快速对齐代码   (如果代码语法错误,就不能使用) Ctrl+Z:  撤销 Ctrl+S:保存   没事就Ctrl+S一下,防止因为电脑断电,代码全部丢失 Ctr ...

  9. 什么是NIO2

    NIO2I/O发展历史Java1.0-1.3在Java的早期版本中,没有完整的I/O支持,在开发过程中需要解决以下问题:1)没有数据缓冲区或者NIO的通道概念,需要编程人员处理底层细节.2)I/O是受 ...

  10. 黑客伦理(hacker ethic)--《黑客与画家》

    使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制.任何事情都应该亲手尝试. Access to computers--and anything that might teach you ...