【问题标题】:Set Excel cell to TimeSpan value将 Excel 单元格设置为 TimeSpan 值
【发布时间】:2021-03-10 00:29:51
【问题描述】:

我需要创建一个 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 文件并读取它们。
所以,我也必须有一种方法可以编写它们,对吧?

【问题讨论】:

  • TimeSpan 值的单元格的预期输出是多少?您希望它们如何出现在 Excel 中。
  • 类似于时间值,与我从 Microsoft Excel 手动写入值“12:30:00”或“999:59:59”时得到的值相同。
  • Excel 中没有直接等效的 TimeSpan。您应该将值设置为数字并使用 excel 格式显示。这里的例子; stackoverflow.com/questions/43896427/… 。还要检查TimeValue功能,它可以提供帮助。

标签: c# excel datetime gembox-spreadsheet


【解决方案1】:

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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多