18

这似乎很愚蠢,但是我无法以 的格式获取我的值,以将#/####其写为文字字符串,而不是在 excel 中格式化为日期。

我正在使用 ClosedXML 写入 excel,并使用以下内容:

// snip
IXLRangeRow tableRow = tableRowRange.Row(1);
tableRow.Cell(1).DataType = XLCellValues.Text;
tableRow.Cell(1).Value = "2/1997";
// snip

查看我在单元格中得到的输出 excel 表2/1/1997- 即使我将格式设置为代码中的文本,我在 excel 表中将其作为“日期”得到 - 我通过右键单击单元格检查了这一点,格式单元格,将“日期”视为格式。

如果我将事情更改为:

// snip
IXLRangeRow tableRow = tableRowRange.Row(1);
tableRow.Cell(1).Value = "2/1997";
tableRow.Cell(1).DataType = XLCellValues.Text;
// snip

相反,我得到35462了我的输出。

我只希望我的字面值2/1997显示在工作表上。请告知如何更正。

4

5 回答 5

36

尝试这个

ws.Cell(rowCounter, colCounter).SetValue<string>(Convert.ToString(fieldValue));
于 2015-11-03T03:42:15.640 回答
4

不确定是否来自 ClosedXML,但可以尝试 Range.NumberFormat(MSDN 链接

例如...

Range("A1").NumberFormat = "@"

或者

Selection.NumberFormat = "#/####"
于 2015-08-25T14:23:36.763 回答
2

考虑:

tableRow.Cell(1).Value = "'2/1997";

注意单引号。

于 2015-08-25T12:29:03.640 回答
1
ws.Cell(rowCounter, colCounter).Value="'"+Convert.ToString(fieldValue));
于 2016-10-28T03:57:09.450 回答
0

在将值写入单元格之前,必须进行格式化。

我有以下机制,在我制作工作表之后运行,就在我保存它之前:

    private void SetColumnFormatToText(IXLWorksheet worksheet)
    {
        var wholeSheet = worksheet.Range(FirstDataRowIndexInExcel, StartCellIndex, RowCount, HeaderCount);
        wholeSheet.Style.NumberFormat.Format = "@";
    }

没有做深蹲。
在此处输入图像描述

在我将值写入连续的单元格之前这样做。

worksheet.Range(RowIndex, StartCellIndex, RowIndex, EndCellIndex).Style.NumberFormat.Format = "@";

紧随其后的是单元格值分配。
在此处输入图像描述

于 2021-07-29T12:55:37.717 回答