将 Excel 单元格设置为 TimeSpan 值
Set Excel cell to TimeSpan value
我需要创建一个 Excel 文件,其中有一列包含时间值(TimeSpan
个对象)。
我正在使用 GemBox.Spreadsheet,我可以使用 ExcelCell.Value
属性 或 ExcelCell.SetValue
创建一个包含日期值的列(DateTime
对象)方法:
var workbook = new ExcelFile();
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].Value = "Start Dates";
// Set cell value to DateTime with Value property.
worksheet.Cells["A2"].Value = DateTime.Today;
// Set cell value to DateTime with SetValue method.
worksheet.Cells["A3"].SetValue(DateTime.Today);
workbook.Save("output.xlsx");
但这些都不适用于 TimeSpan
。
正确使用时,我得到 NotSupportedException
,而当使用方法时,我得到编译器错误。
让我感到困惑的是,我可以加载一个现有的 Excel 文件,其中包含包含时间值的单元格并读取它们。
所以,一定有办法让我也能写出它们,对吧?
Excel 文件没有单独的日期和时间类型。
在阅读那些带有时间值的单元格时,您可能会注意到它们的 ExcelCell.ValueType
设置为 CellValueType.DateTime
。换句话说,ExcelCell.Value
包含 DateTime
对象。
此外,如果您检查 ExcelCell.Style.NumberFormat
,您会注意到它定义了一些时间格式,例如“h:mm:ss”。
无论如何,请尝试使用此 SetValue
扩展方法:
public static class GemBoxHelper
{
public static void SetValue(this ExcelCell cell, TimeSpan span, string format = "[h]:mm:ss")
{
DateTime start = cell.Worksheet.Parent.Use1904DateSystem ?
new DateTime(1904, 1, 1) :
new DateTime(1899, 12, 30);
DateTime date = start.Add(span);
DateTime leapYearBug = new DateTime(1900, 3, 1);
if (date < leapYearBug)
date = date.AddDays(1);
cell.SetValue(date);
cell.Style.NumberFormat = format;
}
}
另外,这里有一个例子展示了如何使用它:
var workbook = new ExcelFile();
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].SetValue(new TimeSpan(12, 30, 00));
worksheet.Cells["A2"].SetValue(new TimeSpan(999, 59, 59));
workbook.Save("output.xlsx");
我需要创建一个 Excel 文件,其中有一列包含时间值(TimeSpan
个对象)。
我正在使用 GemBox.Spreadsheet,我可以使用 ExcelCell.Value
属性 或 ExcelCell.SetValue
创建一个包含日期值的列(DateTime
对象)方法:
var workbook = new ExcelFile();
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].Value = "Start Dates";
// Set cell value to DateTime with Value property.
worksheet.Cells["A2"].Value = DateTime.Today;
// Set cell value to DateTime with SetValue method.
worksheet.Cells["A3"].SetValue(DateTime.Today);
workbook.Save("output.xlsx");
但这些都不适用于 TimeSpan
。
正确使用时,我得到 NotSupportedException
,而当使用方法时,我得到编译器错误。
让我感到困惑的是,我可以加载一个现有的 Excel 文件,其中包含包含时间值的单元格并读取它们。
所以,一定有办法让我也能写出它们,对吧?
Excel 文件没有单独的日期和时间类型。
在阅读那些带有时间值的单元格时,您可能会注意到它们的 ExcelCell.ValueType
设置为 CellValueType.DateTime
。换句话说,ExcelCell.Value
包含 DateTime
对象。
此外,如果您检查 ExcelCell.Style.NumberFormat
,您会注意到它定义了一些时间格式,例如“h:mm:ss”。
无论如何,请尝试使用此 SetValue
扩展方法:
public static class GemBoxHelper
{
public static void SetValue(this ExcelCell cell, TimeSpan span, string format = "[h]:mm:ss")
{
DateTime start = cell.Worksheet.Parent.Use1904DateSystem ?
new DateTime(1904, 1, 1) :
new DateTime(1899, 12, 30);
DateTime date = start.Add(span);
DateTime leapYearBug = new DateTime(1900, 3, 1);
if (date < leapYearBug)
date = date.AddDays(1);
cell.SetValue(date);
cell.Style.NumberFormat = format;
}
}
另外,这里有一个例子展示了如何使用它:
var workbook = new ExcelFile();
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].SetValue(new TimeSpan(12, 30, 00));
worksheet.Cells["A2"].SetValue(new TimeSpan(999, 59, 59));
workbook.Save("output.xlsx");