CPF/CPF.ReoGrid/IO/OpenXML/BuiltinNumberFormats.cs
2024-06-24 10:15:59 +08:00

167 lines
4.6 KiB
C#

using System;
using System.Globalization;
using System.Threading;
using CPF.ReoGrid.DataFormat;
namespace CPF.ReoGrid.IO.OpenXML
{
internal sealed class BuiltinNumberFormats
{
public static bool SetFromExcelBuiltinFormat(Worksheet rgSheet, Cell cell, int formatId, out CellDataFormatFlag dataFormatFlag)
{
CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
CellDataFormatFlag? cellDataFormatFlag = null;
object dataFormatArgs = null;
switch (formatId)
{
case 0:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.General);
break;
case 1:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 0,
UseSeparator = false
};
break;
case 2:
case 11:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 2,
UseSeparator = false
};
break;
case 3:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 0,
UseSeparator = true
};
break;
case 4:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 2,
UseSeparator = true
};
break;
case 9:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Percent);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 0,
UseSeparator = false
};
break;
case 10:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Percent);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 2,
UseSeparator = false
};
break;
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime);
dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs
{
CultureName = currentCulture.Name,
Format = DateTimeFormat.Formats[formatId]
};
break;
case 37:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 0,
UseSeparator = true,
NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Brackets
};
break;
case 38:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 0,
UseSeparator = true,
NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets
};
break;
case 39:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 2,
UseSeparator = true,
NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Brackets
};
break;
case 40:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Number);
dataFormatArgs = new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 2,
UseSeparator = true,
NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets
};
break;
case 45:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime);
dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs
{
CultureName = currentCulture.Name,
Format = "mm:ss"
};
break;
case 46:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime);
dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs
{
CultureName = currentCulture.Name,
Format = "h:mm:ss"
};
break;
case 47:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.DateTime);
dataFormatArgs = new DateTimeDataFormatter.DateTimeFormatArgs
{
CultureName = currentCulture.Name,
Format = "mmss.f"
};
break;
case 49:
cellDataFormatFlag = new CellDataFormatFlag?(CellDataFormatFlag.Text);
break;
}
bool flag = cellDataFormatFlag == null;
bool result;
if (flag)
{
dataFormatFlag = CellDataFormatFlag.General;
result = false;
}
else
{
cell.DataFormat = cellDataFormatFlag.Value;
cell.DataFormatArgs = dataFormatArgs;
dataFormatFlag = cellDataFormatFlag.Value;
result = true;
}
return result;
}
}
}