资源描述
利用excel批量生成制式word表格优质资料
(可以直接使用,可编辑 优质资料,欢迎下载)
利用excel批量生成制式word表格
1、 excel中录入相关信息
2、 制作制式word表格
3、 在word中依次选择“邮件”-“选择收件人”-“使用现有列表”
4、 找到第1步中已经录入信息的excel表格,选择有数据的页,点击“确定”
5、 点击“插入合并域”,在表格需要填写对应内容的地方依次插入对应的excel内容
6、 插入完成后,依次点击“完成并合并”-“编辑单个文档”,在弹出对话框选择“全部”并点击“确定”,即可生成包含所有excel数据、名为“信函1”的新word文档。
员工信息表公式
1、计算性别(F列)
=IF(MOD(MID(E3,17,1),2),"男","女")
2、出生年月(G列)
=TEXT(MID(E3,7,8),"0-00-00")
3、年龄公式(H列)
=DATEDIF(G3,TODAY(),"y")
4、退休日期(I列)
=TEXT(EDATE(G3,12*(5*(F3="男")+55)),"yyyy/mm/dd aaaa")
5、籍贯(M列)
=VLOOKUP(LEFT(E3,6)*1,地址库!E:F,2,)
注:附带示例中有地址库代码表
6、社会工龄(T列)
=DATEDIF(S3,NOW(),"y")
7、公司工龄(W列)
=DATEDIF(V3,NOW(),"y")&"年"&DATEDIF(V3,NOW(),"ym")&"月"&DATEDIF(V3,NOW(),"md")&"天"
Now()可直接用最后日期代替
8、合同续签日期(Y列)
=DATE(YEAR(V3)+LEFTB(X3,2),MONTH(V3),DAY(V3))-1
9、合同到期日期(Z列)
=TEXT(EDATE(V3,LEFTB(X3,2)*12)-TODAY(),"[<0]过期0天;[<30]即将到期0天;还早")
10、工龄工资(AA列)
=MIN(700,DATEDIF($V3,NOW(),"y")*50)
11、生肖(AB列)
=MID("猴鸡狗猪鼠牛虎兔龙蛇马羊",MOD(MID(E3,7,4),12)+1,1)
二、员工考勤表公式
1、本月工作日天数(AG列)
=NETWORKDAYS(B$5,DATE(YEAR(N$4),MONTH(N$4)+1,),)
2、调休天数公式(AI列)
=COUNTIF(B9:AE9,"调")
3、扣钱公式(AO列)
婚丧扣10块,病假扣20元,事假扣30元,矿工扣50元
=SUM((B9:AE9={"事";"旷";"病";"丧";"婚"})*{30;50;20;10;10})
四、员工数据分析公式
1、本科学历人数
=COUNTIF(D:D,"本科")
2、办公室本科学历人数
=COUNTIFS(A:A,"办公室",D:D,"本科")
3、30~40岁总人数
=COUNTIFS(F:F,">=30",F:F,"<40")
五、其他公式
1、提成比率计算
=VLOOKUP(B3,$C$12:$E$21,3)
2、个人所得税计算
假如A2中是应税工资,则计算个税公式为:
=5*MAX(A2*{0.6,2,4,5,6,7,9}%-{21,91,251,376,761,1346,3016},)
3、工资条公式
=CHOOSE(MOD(ROW(A3),3)+1,工资数据源!A$1,OFFSET(工资数据源!A$1,INT(ROW(A3)/3),,),"")
注:
A3:标题行的行数+2,如果标题行在第3行,则A3改为A5
工资数据源!A$1:工资表的标题行的第一列位置
4、Countif函数统计身份证号码出错的解决方法
由于Excel中数字只能识别15位内的,在Countif统计时也只会统计前15位,所以很容易出错。不过只需要用&"*"转换为文本型即可正确统计。
=Countif(A:A,A2&"*")
六、利用数据透视表完成数据分析
1、各部门人数占比
统计每个部门占总人数的百分比
2、各个年龄段人数和占比
公司员工各个年龄段的人数和占比各是多少呢?
3、各个部门各年龄段占比
分部门统计本部门各个年龄段的占比情况
4、各部门学历统计
各部门大专、本科、硕士和博士各有多少人呢?
5、按年份统计各部门入职人数
每年各部门入职人数情况
附:HR工作中常用分析公式
1.【新进员工比率】=已转正员工数/在职总人数
2.【补充员工比率】=为离职缺口补充的人数/在职总人数
3.【离职率】(主动离职率/淘汰率=离职人数/在职总人数=离职人数/(期初人数+录用人数)×100%
4.【异动率】=异动人数/在职总人数
5.【人事费用率】=(人均人工成本*总人数)/同期销售收入总数
6.【招聘达成率】=(报到人数+待报到人数)/(计划增补人数+临时增补人数)
7.【人员编制管控率】=每月编制人数/在职人数
8.【人员流动率】=(员工进入率+离职率)/2
9.【离职率】=离职人数/((期初人数+期末人数)/2)
10.【员工进入率】=报到人数/期初人数
11.【关键人才流失率】=一定周期内流失的关键人才数/公司关键人才总数
12.【工资增加率】=(本期员工平均工资—上期员工平均工资)/上期员工平均工资
13.【人力资源培训完成率】=周期内人力资源培训次数/计划总次数
14.【部门员工出勤情况】=部门员工出勤人数/部门员工总数
15.【薪酬总量控制的有效性】=一定周期内实际发放的薪酬总额/计划预算总额
16.【人才引进完成率】=一定周期实际引进人才总数/计划引进人才总数
17.【录用比】=录用人数/应聘人数*100%
18.【员工增加率】 =(本期员工数—上期员工数)/上期员工数
Excel中日期格式转换问题
一、工作表中出生年月格式是19870705 格式
(一)要想改成1987-7-5格式。
1、首先把此单元格设置成日期2001-3-14 格式;
2、插入一列B,用函数:
B1=(LEFT(A1,4)&"-"&MID(A1,5,2)&"-"&RIGHT(A1,2)),其它单元格可以用此公式自动填充。
(二)要想改成1987年7月7日格式。
1、然后把此单元格设置成日期2001年3月14 日格式; 2、插入一列B列,用函数:
B1=(LEFT(A1,4)&"年"&MID(A1,5,2)&"月"&RIGHT(A1,2)&"日"),其它单元格可以用此公式自动填充。
二、工作表中出生年月格式格式是2021.2.22 格式
(一)要想转换成2021-02-22格式
1、首先把此单元格设置成日期2001-3-14 格式;
2、假如原始数据在A列从A1开始,则在B1输入公式:=TEXT(SUBSTITUTE(A1,".","-"),"yyyy-mm-dd"),其它单元格可以用此公式自动填充。
还可以采取整列用“-”替换“.”的方法实现转换。
(二)要想转换成20210222格式
1、首先把此单元格设置成常规和数值格式;
2、假如原始数据在A列从A1开始,则在B1输入公式:
=TEXT(SUBSTITUTE(A1,".","-"),"yyyymmdd"),其它单元格可以用此公式自动填充。
三、转换数据量较大的批量转换工具----分列
如果Excel表格中有大量的类似“20210510”、“”非日期格式的数据要转换为日期格式,如“2021-5-10”,可以用分列的方法:
1.选择需要转换单元格或区域,单击菜单“数据→分列”,弹出“文本分列向导- 3之步骤1”对话框。如果是Excel 2007,则在功能区中选择“数据”选项卡,在“数据工具”组中,单击“分列”按钮。
2.单击两次“下一步”,在“文本分列向导- 3之步骤3”中,在“列数据格式”中选择“日期”。还可以根据需要,在其后的下拉列表中选择一种日期格式。本例为默认的“YMD”格式。
3.单击“完成”按钮,Excel会在原单元格或区域中将数值格式的
“20210510”和文本格式的“”转换为日期格式“2021-5-10”。
在.NET中不安装Office使用EPPlus生成带图表(Chart)的Excel报表
在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的需求,特别是在一些ASP.NET网站中,有时候我们并不能保证Web服务器上一定安装了Office组件,所以使用微软的Office来生成Excel并不保证在所有情况下都使用,有时候即使Web服务器上安装了Office也会出现一些运行权限方面的原因到导致调用Excel组件生成Excel失败,所以在这里介绍一种无需安装Office并且无需较高权限就能生成Excel的方法。
EPPlus简介
在介绍EPPlus之前,首先要介绍一下Office Open XML。以下文字来自于维基百科( ,有删节):
Office Open XML(缩写:Open XML、OpenXML或OOXML),是由Microsoft开发的一种以XML为基础并以ZIP格式压缩的电子文件,支持Word、Excel、Office Note、PPT等文件格式。OOXML在2006年12月成为了ECMA规范的一部分,编号为ECMA-376;并于2021年4月国际标准化组织(ISO)的表決,在两个月公布为ISO/IEC 29500国际标准。从Microsoft Office 2007开始,Office Open XML文件格式已经成为Microsoft Office默认的文件格式。Microsoft Office 2021支持对ECMA-376标准文档的读操作,ISO/IEC 29500 Transitional的读/写,ISO/IEC 29500 Strict的读取。Microsoft Office 2021同时支持ISO/IEC 29500 Strict的读写操作。
EPPlus就是一个通过Open XML方式来读写Office文件的开源.NET类库,所以使用它生成Office文件完全不需要Microsoft Office(当然如果你需需要查看生成的文件就需要Office了)。它的官方网址是:。如果需要体验本文中提到的效果,需要从这个网址下载最新版本的类库,我现在使用的这个名为EPPlus.dll类库仅658K,非常方便部署。
代码示例
为了演示EPPlus的用法,这里写了一个简单的例子,在这个例子里演示模拟了几大公司实际业绩与计划业绩的百分比,如果这个百分比大于95%则会将所在的单元格显示为绿色,如果小于90%则会显示为红色,否则就显示为黄色,并且还会生成一个图标来直观表示每月实际完成情况与计划的百分比。
完整代码如下:
/*
********************************************************************************
*
* Project A report project
* Module Name Excel Report
* Author Zhou, Jin-Qiao (周金桥)
* Creation Date [11/03/2021]
* Description Generate Excel Report with Chat demo by Epplus
*
* © Copyright 2021 zhoufoxcn.
*
********************************************************************************
*/
using System;
using System.Data;
using System.Drawing;
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using OfficeOpenXml.Style;
namespace ExcelReportApplication
{
/// <summary>
/// 使用EPPlus生成带图表(Chart)的Excel文件的例子,注意在运行的机器上无需安装Office,因为EPPlus是使用基于OpenXML技术生成的Excel文件。
/// 任何网站和个人均可在不对本代码做任何修改的情况下转载本文及本文中示例的代码用于非商业用途,任何除去版权的行为均为侵权。
/// 周公(周金桥)
/// 创建日期:2021-11-03
/// 博客地址: :// ://zhoufoxcn.blog.51cto
/// 新浪微博地址: ://weibo /zhoufoxcn
public class ExcelExportPage
{
private static readonly string[] MonthNames = new string[] { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"};
//private static readonly string[] CommpanyNames = new string[] { "Microsoft", "IBM", "Oracle", "Amazon", "Google", "Facebook", "Twitter", "Paypal", "Yahoo", "HP" };
private static readonly string[] CommpanyNames = new string[] { "Microsoft", "IBM", "Oracle", "Google","Yahoo", "HP" };
static void Main(string[] args)
{
ExcelExportPage.GenerateExcelReport();
}
/// <summary>
/// 周公(周金桥)说明:这个方法就是主要演示如何生成带图表(Chart)的Excel文件的例子
/// </summary>
public static void GenerateExcelReport()
{
string fileName = "ExcelReport-"+DateTime.Now.ToString("yyyy_MM_dd_HHmmss") + ".xlsx";
string reportTitle = "2021年度五大公司实际情况与原计划的百分比";
FileInfo file = new FileInfo("C:\\"+fileName);
using (ExcelPackage package = new ExcelPackage(file))
{
ExcelWorksheet worksheet = null;
ExcelChartSerie chartSerie = null;
ExcelLineChart chart = null;
#region research
worksheet = package.Workbook.Worksheets.Add("Data");
DataTable dataPercent = GetDataPercent();
//chart = Worksheet.Drawings.AddChart("ColumnStackedChart", eChartType.Line) as ExcelLineChart;
chart = worksheet.Drawings.AddChart("ColumnStackedChart", eChartType.LineMarkers) as ExcelLineChart;//设置图表样式
chart.Legend.Position = eLegendPosition.Right;
chart.Legend.Add();
chart.Title.Text = reportTitle;//设置图表的名称
//chart.SetPosition(200, 50);//设置图表位置
chart.SetSize(800, 400);//设置图表大小
chart.ShowHiddenData = true;
//chart.YAxis.MinorUnit = 1;
chart.XAxis.MinorUnit = 1;//设置X轴的最小刻度
//chart.DataLabel.ShowCategory = true;
chart.DataLabel.ShowPercent = true;//显示百分比
//设置月份
for (int col = 1; col <= dataPercent.Columns.Count; col++)
{
worksheet.Cells[1, col].Value = dataPercent.Columns[col - 1].ColumnName;
}
//设置数据
for (int row = 1; row <= dataPercent.Rows.Count; row++)
{
for (int col = 1; col <= dataPercent.Columns.Count; col++)
{
string strValue = dataPercent.Rows[row - 1][col - 1].ToString();
if (col == 1)
{
worksheet.Cells[row + 1, col].Value = strValue;
}
else
{
double realValue = double.Parse(strValue);
worksheet.Cells[row + 1, col].Style.Fill.PatternType = ExcelFillStyle.Solid;
worksheet.Cells[row + 1, col].Style.Numberformat.Format = "#0\\.00%";//设置数据的格式为百分比
worksheet.Cells[row + 1, col].Value = realValue;
if (realValue< 0.90d)//如果小于90%则该单元格底色显示为红色
{
worksheet.Cells[row + 1, col].Style.Fill.BackgroundColor.SetColor(Color.Red);
}
else if (realValue>= 0.90d && realValue <= 0.95d)//如果在90%与95%之间则该单元格底色显示为黄色
{
worksheet.Cells[row + 1, col].Style.Fill.BackgroundColor.SetColor(Color.Yellow);
}
else
{
worksheet.Cells[row + 1, col].Style.Fill.BackgroundColor.SetColor(Color.Green);//如果大于95%则该单元格底色显示为绿色
}
}
}
//chartSerie = chart.Series.Add(worksheet.Cells["A2:M2"], worksheet.Cells["B1:M1"]);
//chartSerie.HeaderAddress = worksheet.Cells["A2"];
//chart.Series.Add()方法所需参数为:chart.Series.Add(X轴数据区,Y轴数据区)
chartSerie = chart.Series.Add(worksheet.Cells[row + 1, 2, row + 1, 2 + dataPercent.Columns.Count - 2], worksheet.Cells["B1:M1"]);
chartSerie.HeaderAddress = worksheet.Cells[row + 1, 1];//设置每条线的名称
}
//因为假定每家公司至少完成了80%以上,所以这里设置Y轴的最小刻度为80%,这样使图表上的折线更清晰
chart.YAxis.MinValue = 0.8d;
//chart.SetPosition(200, 50);//可以通过制定左上角坐标来设置图表位置
//通过指定图表左上角所在的行和列及对应偏移来指定图表位置
//这里CommpanyNames.Length + 1及3分别表示行和列
chart.SetPosition(CommpanyNames.Length + 1, 10, 3, 20);
#endregion research
package.Save();//保存文件
}
}
/// <summary>
/// 生成数据,由于这一步不是主要逻辑,所以采用随机生成数据的方式,实际中可根据需要从数据库或其它数据源中读取需要的数据
/// </summary>
/// <returns></returns>
private static DataTable GetDataPercent()
{
DataTable data = new DataTable();
DataRow row = null;
Random random=new Random();
data.Columns.Add(new DataColumn("公司名", typeof(string)));
foreach(string monthName in MonthNames){
data.Columns.Add(new DataColumn(monthName, typeof(double)));
}
//每个公司每月的百分比表示完成的业绩与计划的百分比
for (int i = 0; i < CommpanyNames.Length; i++)
{
row = data.NewRow();
row[0] = CommpanyNames[i];
for (int j = 1; j <= MonthNames.Length; j++)
{
//这里采用了随机生成数据,但假定每家公司至少完成了计划的85%以上
row[j] = 0.85d + random.Next(0, 15) / 100d;
}
data.Rows.Add(row);
}
return data;
}
}
}
最终生成的Excel文件内容如下:
周公(周金桥)
2021年11月4日凌晨于武汉
展开阅读全文