导出Excel值班表
private void btn_export_1_Click(object sender, RoutedEventArgs e) {
try {
//表格数据源为空是不执行导出操作
if (ltDataSchedule == null || ltDataSchedule.Count() <= 0) 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 = 1;
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 = 0; i <= totalDays; i++) {
ColumnInfo conlInfo = new ColumnInfo(xls, sheet);
conlInfo.ColumnIndexStart = (ushort) i;
conlInfo.ColumnIndexEnd = (ushort) i;
conlInfo.Width = 18 * 256; // 列的宽度计量单位为 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 = 300;// 设定字大小
//表头样式
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 = 250;
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 = 220;
#endregion
#region 填充第一行的列标题
//标题
MergeArea maTitle = new MergeArea(1, 1, 1, totalDays + 1);// 先行后列:合并单元格(合并第1行、第1列 到 第1行、第13列)
sheet.AddMergeArea(maTitle);
cells.Add(1, 1, title, xfTitle);
//姓名
MergeArea maorg1 = new MergeArea(2, 2, 1, 1);
sheet.AddMergeArea(maorg1);
cells.Add(2, 1, "姓名", xf_head);
for (int i = 1; i <= totalDays; i++) {
MergeArea maorg = new MergeArea(2, 2, i + 1, i + 1);
sheet.AddMergeArea(maorg);
DateTime dtime = Convert.ToDateTime(select_year + "-" + select_month + "-" + i);
string cols = i + "号/" + week_str[Convert.ToInt16(dtime.DayOfWeek)];
cells.Add(2, i + 1, cols, xf_head);
}
#endregion
#region 循环数据源 逐行添加数据
for (int i = 0; i < ltDataSchedule.Count(); i++) {
int StatRow = i + 3;//从表格的第三行开始添加数据
for (int k = 0; k <= totalDays; k++) {
#region 填充列值
if (k == 0)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].name, xf); //给单元格赋值:行,列,列值,单元格样式
else if (k == 1)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day1, xf);
else if (k == 2)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day2, xf);
else if (k == 3)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day3, xf);
else if (k == 4)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day4, xf);
else if (k == 5)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day5, xf);
else if (k == 6)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day6, xf);
else if (k == 7)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day7, xf);
else if (k == 8)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day8, xf);
else if (k == 9)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day9, xf);
else if (k == 10)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day10, xf);
else if (k == 11)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day11, xf);
else if (k == 12)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day12, xf);
else if (k == 13)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day13, xf);
else if (k == 14)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day14, xf);
else if (k == 15)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day15, xf);
else if (k == 16)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day16, xf);
else if (k == 17)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day17, xf);
else if (k == 18)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day18, xf);
else if (k == 19)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day19, xf);
else if (k == 20)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day20, xf);
else if (k == 21)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day21, xf);
else if (k == 22)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day22, xf);
else if (k == 23)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day23, xf);
else if (k == 24)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day24, xf);
else if (k == 25)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day25, xf);
else if (k == 26)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day26, xf);
else if (k == 27)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day27, xf);
else if (k == 28)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day28, xf);
else if (k == 29)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day29, xf);
else if (k == 30)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day30, xf);
else if (k == 31)
sheet.Cells.Add(StatRow, k + 1, ltDataSchedule[i].day31, xf);
else {
sheet.Cells.Add(StatRow, k + 1, "", xf);
}
#endregion
}
}
#endregion
xls.Save(stream);
}
MessageBox.Show("导出成功");
}
} catch (Exception ex) {
RadWindow.Alert(ex.Message);
}
}