/// <summary>
/// 转换单元格信息
/// </summary>
/// <param name="hSSFCell"></param>
/// <param name="xSSFCell"></param>
/// <param name="xSSFCellStyles"></param>
/// <param name="xSSFFonts"></param>
/// <param name="isConvertStyle"></param>
private static void ConvertHCellToXCell(HSSFCell hSSFCell,XSSFCell xSSFCell,List<XSSFCellStyle> xSSFCellStyles, List<XSSFFont> xSSFFonts, Dictionary<CellAddress,XSSFComment> xCommnetsDic, bool isConvertStyle = true)
{
if (hSSFCell != null)
{
var hCellType = hSSFCell.CellType;
if (hSSFCell.CellComment != null)
{
var xCellComment = xCommnetsDic.Where(w => w.Key.Column == hSSFCell.CellComment.Address.Column && w.Key.Row == hSSFCell.CellComment.Address.Row).FirstOrDefault().Value;
xSSFCell.CellComment = xCellComment;
}
switch (hCellType)
{
case NPOI.SS.UserModel.CellType.Numeric:
xSSFCell.SetCellValue(hSSFCell.NumericCellValue);
break;
case NPOI.SS.UserModel.CellType.Unknown:
return;
case NPOI.SS.UserModel.CellType.Boolean:
xSSFCell.SetCellValue(hSSFCell.BooleanCellValue);
break;
case NPOI.SS.UserModel.CellType.Blank:
return;
case NPOI.SS.UserModel.CellType.Formula:
xSSFCell.SetCellValue(hSSFCell.CellFormula);
break;
case NPOI.SS.UserModel.CellType.Error:
xSSFCell.SetCellErrorValue(hSSFCell.ErrorCellValue);
return;
case NPOI.SS.UserModel.CellType.String:
//xSSFCell.SetCellValue(hSSFCell.StringCellValue);
HSSFRichTextString richText = (HSSFRichTextString)hSSFCell.RichStringCellValue;
int formattingRuns = hSSFCell.RichStringCellValue.NumFormattingRuns;
XSSFRichTextString xSSFRichTextString = new XSSFRichTextString(richText.String);
for (int i = 0; i < formattingRuns; i++)
{
int startIdx = richText.GetIndexOfFormattingRun(i);
short fontIndex = richText.GetFontOfFormattingRun(i);
HSSFFont hSSFFont = hSSFCell.Sheet.Workbook.GetFontAt(fontIndex) as HSSFFont;
var xFont = FindXFont(hSSFFont, xSSFFonts, (XSSFSheet)xSSFCell.Sheet);
xSSFRichTextString.ApplyFont(startIdx, richText.Length, xFont);
}
xSSFCell.SetCellValue(xSSFRichTextString);
break;
}
if (isConvertStyle)
{
//获取需要处理的一些需要处理的样式元素信息
HSSFCellStyle hSSFCellStyle = hSSFCell.CellStyle as HSSFCellStyle;
if (hSSFCellStyle != null)
{
var xStyle = FindXStyle(hSSFCellStyle, xSSFCellStyles, (XSSFSheet)xSSFCell.Sheet);
if (xStyle != null)
{
xSSFCell.CellStyle = xStyle;
}
}
}
}
return;
}