在 C# 的 npoi 中双击 excel 只有格式被应用到 excel
After double click over excel only format is getting applied over excel in npoi in C#
我有一个要求 其中 NPOI 单元格值的格式为 "MM/dd/yy" 并且当用户单击该特定单元格时,它应该显示完整的值,如下所示图片.
当我尝试手动执行时,它工作得很好,但是当我通过代码应用时。没用。
我在下面附上示例代码以供参考。所以你可以指导我寻找可能的解决方案。非常感谢您的帮助和支持。
提前致谢。
string value = "02/17/2017 10:10:10";
DateTime datetime;
SimpleDateFormat dateFormat = new SimpleDateFormat ("MM/dd/yy");
DateTime dt = Convert.ToDateTime(value);
var dateString = dateFormat.Format(dt, CultureInfo.InvariantCulture);
if (DateTime.TryParseExact(dateString.ToString(), "MM/dd/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out datetime))
{
cell.SetCellValue(datetime.Date);
}
else
{
cell.SetCellValue(value);
}
//For styling
var dateTypecontentStyle = workbook.CreateCellStyle();
dateTypecontentStyle.DataFormat = dataFormatCustom.GetFormat("MM/dd/yy");
cell.CellStyle = dateTypecontentStyle;
好的,据我了解您的需要,这应该可以解决问题:
假设您要将日期和时间添加到单元格 A1,这是我的做法并且有效:
xl.range cellA1 = yourWorksheet.Cells[1,1];
cellA1.Formula = "=NOW()";
CellA1.Value = CellA1.Value;
CellA1.NumberFormat = "m/d/yyyy";
在此之后,您的单元格应该只显示日期,并且单元格内应该还有时间。
希望这有帮助。
设置单元格的日期格式为MM/dd/yy
,然后在单元格中设置完整的日期。单元格应将日期显示为 MM/dd/yy
,但在选择单元格时显示完整日期。
试试这个代码:
DateTime dateTest = DateTime.ParseExact("02/17/2017 10:10:10", "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
using (FileStream fs = new FileStream(@"C:\temp\test.xlsx", FileMode.Create, FileAccess.Write))
{
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet");
IRow row = sheet.CreateRow(0);
ICell cell = row.CreateCell(0);
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("MM/dd/yy");
cell.CellStyle = cellStyle;
cell.SetCellValue(dateTest);
workbook.Write(fs);
}
请检查cell.SetCellValue
的数据类型。
- 对于 currency dataformatter,数据类型将为 double
cell.SetCellValue(double)
.
- 对于日期,它将是日期,
- 等等
cell.SetCellValue(String)
可能会导致您的问题。
我有一个要求
当我尝试手动执行时,它工作得很好,但是当我通过代码应用时。没用。
我在下面附上示例代码以供参考。所以你可以指导我寻找可能的解决方案。非常感谢您的帮助和支持。 提前致谢。
string value = "02/17/2017 10:10:10";
DateTime datetime;
SimpleDateFormat dateFormat = new SimpleDateFormat ("MM/dd/yy");
DateTime dt = Convert.ToDateTime(value);
var dateString = dateFormat.Format(dt, CultureInfo.InvariantCulture);
if (DateTime.TryParseExact(dateString.ToString(), "MM/dd/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out datetime))
{
cell.SetCellValue(datetime.Date);
}
else
{
cell.SetCellValue(value);
}
//For styling
var dateTypecontentStyle = workbook.CreateCellStyle();
dateTypecontentStyle.DataFormat = dataFormatCustom.GetFormat("MM/dd/yy");
cell.CellStyle = dateTypecontentStyle;
好的,据我了解您的需要,这应该可以解决问题:
假设您要将日期和时间添加到单元格 A1,这是我的做法并且有效:
xl.range cellA1 = yourWorksheet.Cells[1,1];
cellA1.Formula = "=NOW()";
CellA1.Value = CellA1.Value;
CellA1.NumberFormat = "m/d/yyyy";
在此之后,您的单元格应该只显示日期,并且单元格内应该还有时间。 希望这有帮助。
设置单元格的日期格式为MM/dd/yy
,然后在单元格中设置完整的日期。单元格应将日期显示为 MM/dd/yy
,但在选择单元格时显示完整日期。
试试这个代码:
DateTime dateTest = DateTime.ParseExact("02/17/2017 10:10:10", "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
using (FileStream fs = new FileStream(@"C:\temp\test.xlsx", FileMode.Create, FileAccess.Write))
{
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet");
IRow row = sheet.CreateRow(0);
ICell cell = row.CreateCell(0);
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("MM/dd/yy");
cell.CellStyle = cellStyle;
cell.SetCellValue(dateTest);
workbook.Write(fs);
}
请检查cell.SetCellValue
的数据类型。
- 对于 currency dataformatter,数据类型将为 double
cell.SetCellValue(double)
. - 对于日期,它将是日期,
- 等等
cell.SetCellValue(String)
可能会导致您的问题。