所以我有 shift excel 表,我需要从中获取值,其填充如下
星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 | 周日 | |
---|---|---|---|---|---|---|---|
时间 | |||||||
早 7-13 | 姓名 | 姓名 | 姓名 | 姓名 | 姓名 | 姓名 | 姓名 |
13-21 点晚 | 姓名 | 姓名 | 姓名 | 姓名 | 姓名 | 姓名 | 姓名 |
相关单元格值位于 B4-H4 和 B5-H5
我设置了一个方法
public static string GetName(Worksheet worksheet, DateTime dateTime)
{
string Name = "";
DateTime weekStartDate = dateTime.Date.AddDays(-(int)dateTime.DayOfWeek);
var usedRange = worksheet.UsedRange;
var rows = usedRange.Rows;
int rowCount = rows.Count;
for (int i = 1; i <= rowCount; i++)
{
var row = (Range)rows[i];
if (row.Row == 1)
{
continue;
}
var dayOfWeekCell = (Range)row.Cells[1, 1];
var dayOfWeekText = dayOfWeekCell.Text;
if (!Enum.TryParse(dayOfWeekText, out DayOfWeek dayOfWeek))
{
continue;
}
var columnCount = usedRange.Columns.Count;
for (int j = 1; j <= columnCount; j++)
{
var column = (Range)usedRange.Columns[j];
var columnHeader = column.Cells[1, 1].Text;
if (string.Equals(columnHeader, dayOfWeekText, StringComparison.OrdinalIgnoreCase))
{
var shiftTypeCell = (Range)row.Cells[2, j];
string currentShiftType = shiftTypeCell.Text;
if (dateTime.TimeOfDay >= new TimeSpan(7, 0, 0) && dateTime.TimeOfDay < new TimeSpan(13, 30, 0) && string.Equals(currentShiftType, "Früh", StringComparison.OrdinalIgnoreCase))
{
Name = (row.Cells[4, j] as Range).Value;
}
else if (dateTime.TimeOfDay >= new TimeSpan(13, 30, 0) && dateTime.TimeOfDay < new TimeSpan(21, 0, 0) && string.Equals(currentShiftType, "Spät", StringComparison.OrdinalIgnoreCase))
{
Name = (row.Cells[5, j] as Range).Value;
}
break;
}
}
if (!string.IsNullOrEmpty(Name))
{
break;
}
}
return Name;
}
这样叫
string Person = Helpers.GetName((Worksheet)shiftsWorksheet, zeitpunkt);
它总是返回空值。这些单元格没有以任何方式格式化。我不太确定如何根据输入的白天从工作表中动态获取“人”。例如 04.03.2023 14:30 应该获取 G5 的单元格值作为周六的晚班。
我看了你的代码
var row = (Range)rows[i];
if (row.Row == 1)
{
continue;
}
continue
,因为这不是工作日。这将发生在您工作表中的所有下一行。var dayOfWeekCell = (Range)row.Cells[1, 1];
var dayOfWeekText = dayOfWeekCell.Text;
if (!Enum.TryParse(dayOfWeekText, out DayOfWeek dayOfWeek))
{
continue;
}