首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从EPPLUS中的文本文件加载日期

从EPPLUS中的文本文件加载日期
EN

Stack Overflow用户
提问于 2015-10-14 15:25:25
回答 1查看 1K关注 0票数 1

我正在尝试使用标签分隔的文本文件作为数据源在我的web应用程序中创建一个Excel电子表格。加载我的数据的代码如下所示:

代码语言:javascript
复制
// Load the data into the cells
Int32 rowIdx = 1;
foreach (String line in tab.Lines)
{
    String[] cellTexts = line.Split(TAB);
    Int32 colIdx = 1;
    foreach (String cellText in cellTexts)
    {
        sheet.Cells[rowIdx, colIdx].Value = cellText;
        colIdx++;
    }
    rowIdx++;
}

看上去挺好的。但是,稍后,我在单元格中添加了一个"mm/dd/yyyy“的NumberFormat:

代码语言:javascript
复制
range.Style.Numberformat.Format = "mm/dd/yyyy";

但是,这不会改变单元格中数据的显示。(原始文本文件中的日期看起来类似于5/1/1512/31/15,在应用格式之后仍然是这样。

我非常肯定这一点,因为我已经将一个文本值放入了单元格。(虽然看起来像个约会对象,但它仍然只是一个字符串。)但从我的阅读来看,我需要将一个双放入到单元格中,以满足Excel的期望,即日期以双倍形式存储。因为单元格包含一个字符串而不是一个双字符,所以不应用格式字符串,留下原始的、未格式化的文本。

我想添加一些代码到

  1. 检查应用日期格式范围内每个单元格中的数据类型。
  2. 如果不是双倍,尝试将其转换为日期。
  3. 如果日期转换成功,则将.NET日期转换为OADate并将其放回单元格中。

我的问题是:是最好的(或者至少是一个合理的)方法,如果是的话,我如何做到这一点?

此代码不起作用:

代码语言:javascript
复制
foreach (OfficeOpenXml.ExcelRangeBase oneCell in range)
{
    if (typeof(oneCell.Value) == "System.String")
    {
        // date manipulations here
    }
}

红线出现在oneCell下的typeof(oneCell.Value)调用中,消息“无法找到类型或名称空间'oneCell‘。(您缺少一个使用指令还是程序集引用?)?”

请注意,我无法预先知道日期字段将在哪里,因为数据和单元格格式都是从外部源提供的。(外部单元格格式确实指示要应用的格式是日期格式,而不是常规数字格式或字符串。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-14 16:48:01

正如@mason建议的那样,我发布了我用来解决这个问题的代码。

(我没有回答我最初的问题,即如何在一个范围内迭代单元格并检查每个单元格的内容的数据类型,但是使用这个解决方案,我不再需要这样做了。)

相反,我修改了从标签分隔的文本文件加载数据的循环,以使用一些TryParse()调用来检测日期、数字或常规文本数据,然后将适当类型的数据加载到单元格中。请注意,如果单元格实际上是文本,则它如何检查前导单引号字符以抑制数据类型,但看起来像数字或日期一样

代码语言:javascript
复制
// Load the data into the cells
Int32 rowIdx = 1;
foreach (String line in tab.Lines)
{
    String[] cellTexts = line.Split(TAB);
    Int32 colIdx = 1;
    foreach (String cellText in cellTexts)
    {
        DateTime dateValue;
        Double doubleValue;
        if(cellText.StartsWith("'"))
        {
            sheet.Cells[rowIdx, colIdx].Value = cellText.Substring(1);
        }
        else if(DateTime.TryParse(cellText,out dateValue))
        {
            sheet.Cells[rowIdx, colIdx].Value = dateValue;
        }
        else if (Double.TryParse(cellText, out doubleValue))
        {
            sheet.Cells[rowIdx, colIdx].Value = doubleValue;
        }
        else
        {
            sheet.Cells[rowIdx, colIdx].Value = cellText;
        }
        colIdx++;
    }
    rowIdx++;
}

在单元格中适当键入数据后,格式具有所需的效果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33129435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档