Excelでは、日付は数値として格納されます。書式設定された日付を取得する場合は、セルに日付が含まれているかどうかを確認する必要があります(そのためのユーティリティメソッドがあります)。次に、セルの日付値を取得し、データ形式を取得し、フォーマットを使用している文字列。 CellType
を強制的に文字列にしてはいけません。そうしないと、もともとセルが元々日付を保持していることを伝えることができなくなります。このようにそれを使用し、その後
using NPOI.SS.UserModel;
public static class NpoiExtensions
{
public static string GetFormattedCellValue(this ICell cell, IFormulaEvaluator eval = null)
{
if (cell != null)
{
switch (cell.CellType)
{
case CellType.String:
return cell.StringCellValue;
case CellType.Numeric:
if (DateUtil.IsCellDateFormatted(cell))
{
DateTime date = cell.DateCellValue;
ICellStyle style = cell.CellStyle;
// Excel uses lowercase m for month whereas .Net uses uppercase
string format = style.GetDataFormatString().Replace('m', 'M');
return date.ToString(format);
}
else
{
return cell.NumericCellValue.ToString();
}
case CellType.Boolean:
return cell.BooleanCellValue ? "TRUE" : "FALSE";
case CellType.Formula:
if (eval != null)
return GetFormattedCellValue(eval.EvaluateInCell(cell));
else
return cell.CellFormula;
case CellType.Error:
return FormulaError.ForInt(cell.ErrorCellValue).String;
}
}
// null or blank cell, or unknown cell type
return string.Empty;
}
}
:私はそのタイプに基づいてフォーマットされたセルの値を取得するには、次のように拡張メソッドを作る推薦
ICell cell = row.GetCell(i);
string fieldString = cell.GetFormattedCellValue();
result = result + ";" + FieldValue;
オプション:あなたは内の任意の数式を使用している場合は、あなたのこれらの数式を評価するには、ブックの種類に基づいてIFormulaEvaluator
を作成し、評価ツールをGetFormattedCellValue()
メソッドに渡します。例:
IFormulaEvaluator eval;
if (workbook is XSSFWorkbook)
eval = new XSSFFormulaEvaluator(workbook);
else
eval = new HSSFFormulaEvaluator(workbook);
...
ICell cell = row.GetCell(i);
string fieldString = cell.GetFormattedCellValue(eval);
result = result + ";" + FieldValue;
質問を指定してください。 –