我有一个包含公司所有员工的表(hr_employees)。除了这个表之外,还有另一个表,它包含所有开始日期和结束日期,以及它们具有的合同类型(hr_employees_status)。
根据我获得的数据,我将1或0(1个永久基础,0个其他)写入Excel电子表格,颜色编码由合同类型确定(1 =黑色,0 =蓝色,绿色,灰色或者每个月(从2005年5月到现在)。我如何通过case子句确定应该在哪个单元格中查看,查看hr_employee_status表中的当前状态。
它循环很好,并且正确地完成了99%。唯一的问题是,一旦员工从临时合同转移到永久合同,它有时不会将正确的值写入单元格。
我已经将代码更改为仅从数据库中拉出月份和年份(并将日期设置为01),这是因为,由于月份和年份是写入单元格所需的全部内容,因此会在正确的单元格中写入正确的数据。但无济于事。
我不知道要发布什么代码,所以这里是确定合同类型并将其写入Excel工作表的循环:
switch ($dates['status']) {
case '0':
$color = 'blue';
$cellcontent="0";
break;
case '1':
$color = 23;
$cellcontent="0";
break;
case '2':
$color = 'black';
$cellcontent="1";
break;
case '3':
$color = 'green';
$cellcontent="0";
break;
case '4':
$color = 'red';
if(mysql_num_rows($query) > 2)
$cellcontent = "0";
else {
$cellcontent="1";
}
break;
}
if($s['state'] == '4')
$color = 'red';
$format_content =& $workbook->addFormat(array('align' => 'center', 'size' => 11, 'numformat' => '@', 'fontfamily' => 'Calibri', 'left' => 1, 'bottom' => 1, 'right' => 1, 'color' => $color));
for($f = $start_at; $f <= $start_at+$count; $f++) {
$totalmonths = $totalmonths + $cellcontent;
$worksheet->write($k,15+$f,$cellcontent,$format_content);
}
$date
是从DB收到的结果。
$start_at
是员工以合同类型开始的日期(从而确定要标记的月份)。
$count
是开始日期和结束日期(月数)之间的差异。
我想知道为什么在从临时合同转换为永久合同时,它不会在正确的日期开始。
如果需要任何其他信息,请告知我们。
编辑1: - 对DaveRandom和Oleg反馈的回应
@DaveRandom:
hr_employees
看起来像这样:
------------------------------------------
|employee_id|name|surname|otherinfo|state|
|1 |Foo |Bar | ******* | 1 |
|2 |Ben |Smith | ******* | 1 |
------------------------------------------
hr_employees_status
看起来像这样:
------------------------------------------
|employee_id|from_date |to_date |status|
|1 |2006-07-12|2009-08-11| 0 |
|1 |2009-08-12|0000-00-00| 1 |
|2 |2009-07-01|0000-00-00| 1 |
------------------------------------------
然后excel表格将输出
Name Surname Start Date *dates* June-06 July06 ->- July09 Aug09 Sep09
Foo Bar 2006-07-12 *empty* 0 ->- 0 1 1
Ben Smith 2009-07-01 *empty* *empty* ->- 1 1 1
@Oleg
$start_at
如下:
round(((substr($dates['from_date'],0,4) * 12) + substr($dates['from_date'],5,2)) - ((substr($start_date,0,4) * 12) + substr($start_date,5,2))) + 1;
// $dates is a loop through the hr_employee_status table
见上文。 $dates
是hr_employee_status表的循环。我100%确定状态在那里。
请解释类型杂耍?状态中的所有值都是varchar(并且不要问我为什么,现在看着它,这似乎是一件愚蠢的事情......)
答案 0 :(得分:0)
我们错过了您代码的一些关键部分,因此在您提供更多详细信息之前(例如,您能告诉我们您在哪里定义$start_at
吗?)我只能猜测......
$start_at
的代码。它对我们有用。switch
$dates['status']
?你确定它在$dates
吗?switch
语句比较类型杂耍后的值...... switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
这可能是您的switch statement
永远不会达到永久合同状态1的情况,因为$dates['status']
的{{1}}类型不正确,导致case '0':
停止。
尝试使用var_dump()
查看您在代码中操作的变量的确切类型和值。