using ExcelDataReader; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CommonBase { public class ExcelExport { private static void QuertExcel() { Process[] excels = Process.GetProcessesByName("EXCEL"); foreach (var item in excels) { item.CloseMainWindow(); //item.Kill(); } }//进程查询 //public static string XLSSavesaCSV(string FilePath) //{ // QuertExcel(); // string _NewFilePath = ""; // Microsoft.Office.Interop.Excel.Application excelApplication; // Microsoft.Office.Interop.Excel.Workbooks excelWorkBooks = null; // Microsoft.Office.Interop.Excel.Workbook excelWorkBook = null; // Microsoft.Office.Interop.Excel.Worksheet excelWorkSheet = null; // try // { // excelApplication = new Microsoft.Office.Interop.Excel.ApplicationClass(); // excelWorkBooks = excelApplication.Workbooks; // excelWorkBook = ((Microsoft.Office.Interop.Excel.Workbook)excelWorkBooks.Open(FilePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value)); // excelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkBook.Worksheets[1]; // excelApplication.Visible = false; // excelApplication.DisplayAlerts = false; // _NewFilePath = FilePath.Replace(".xls", ".csv"); // // excelWorkSheet._SaveAs(FilePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Missing.Value, Missing.Value, Missing.Value,Missing.Value,Missing.Value, Missing.Value, Missing.Value); // excelWorkBook.SaveAs(_NewFilePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); // QuertExcel(); // //ExcelFormatHelper.DeleteFile(FilePath); // } // catch (Exception exc) // { // throw new Exception(exc.Message); // } // QuertExcel(); // return _NewFilePath; //}//excel转csv static IWorkbook hssfworkbook; /// /// 使用DataTable导出数据 /// /// 数据 /// 文件名 /// 提示消息 public static void DtToExcel(DataTable dt, string FileName = "", string SheetName = null, bool report = true) { //try //{ if (dt != null && dt.Rows.Count > 0) { SaveFileDialog dlg = new SaveFileDialog();//申明保存对话框 dlg.Filter = "Excel文件|*.xlsx"; dlg.FileName = FileName;//默认文件名称 if (FileName == "") if (dlg.ShowDialog() == DialogResult.Cancel) return; dlg.InitialDirectory = Directory.GetCurrentDirectory();//返回文件路径 string filename = dlg.FileName;//输出的文件名称 if (filename.Trim() == " ")//验证strFileName是否为空或值无效 { return; } hssfworkbook = new XSSFWorkbook(); ISheet sheet; if (SheetName == null) sheet = hssfworkbook.CreateSheet("Sheet1"); else sheet = hssfworkbook.CreateSheet(SheetName); int colscount = dt.Columns.Count;//定义表格内数据的列数 ArrayList arr = new ArrayList();//储存头信息 ICellStyle cstyle_Datetime = hssfworkbook.CreateCellStyle(); ICellStyle cstyle_Numeric = hssfworkbook.CreateCellStyle(); ICellStyle cstyle_String = hssfworkbook.CreateCellStyle(); IDataFormat format_Datetime = hssfworkbook.CreateDataFormat(); IDataFormat format_Numeric = hssfworkbook.CreateDataFormat(); IDataFormat format_String = hssfworkbook.CreateDataFormat(); cstyle_Datetime.DataFormat = format_Datetime.GetFormat("yyyy-MM-dd HH:mm:ss"); cstyle_Numeric.DataFormat = 0; cstyle_String.DataFormat = 0; IRow rowHeader = sheet.CreateRow(0);//创建列头数据 int displayColumnsCount = 0;//用于处理隐藏列头不被显示 XSSFFont hssffont = hssfworkbook.CreateFont() as XSSFFont; hssffont.FontHeightInPoints = 11; //设置单元格边框 for (int i = 0; i < dt.Columns.Count; i++)//生成表头信息 { ICell cell = rowHeader.CreateCell(displayColumnsCount); cell.SetCellValue(dt.Columns[i].ToString()); sheet.SetColumnWidth(displayColumnsCount, 17 * 256); displayColumnsCount++; arr.Add(dt.Columns[i].ToString()); } for (int i = 0; i < dt.Rows.Count; i++) { IRow irow = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell; if (dt.Columns[j].DataType == typeof(DateTime)) { cell = irow.CreateCell(j, CellType.Numeric); try { cell.SetCellValue(DateTime.Parse(dt.Rows[i][j].ToString())); cell.CellStyle = cstyle_Datetime; } catch { cell.SetCellValue(dt.Rows[i][j].ToString()); } } else if (dt.Columns[j].DataType == typeof(double)) { cell = irow.CreateCell(j, CellType.Numeric); cell.CellStyle = cstyle_Numeric; double d; if (double.TryParse(dt.Rows[i][j].ToString(), out d)) cell.SetCellValue(d); else cell.SetCellValue(d.ToString()); } else { cell = irow.CreateCell(j); cell.CellStyle = cstyle_String; cell.SetCellValue(dt.Rows[i][j].ToString()); } } } using (Stream stream = File.OpenWrite(filename)) { hssfworkbook.Write(stream); if (report) MessageBox.Show(filename + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { if (report) MessageBox.Show("没有数据可供导出", "提示"); } //} // catch // { // MessageBox.Show("操作失败", "提示"); // } }//输出Excel public static void DsToExcel(DataSet ds, string FileName = "") { try { if (ds != null) { #region 验证ds非空 & 保存对话框 SaveFileDialog dlg = new SaveFileDialog();//申明保存对话框 dlg.Filter = "Excel文件|*.xls"; dlg.FileName = FileName;//默认文件名称 if (dlg.ShowDialog() == DialogResult.Cancel) return; dlg.InitialDirectory = Directory.GetCurrentDirectory();//返回文件路径 string filename = dlg.FileName;//输出的文件名称 if (filename.Trim() == " ")//验证strFileName是否为空或值无效 { return; } #endregion hssfworkbook = new HSSFWorkbook(); ISheet sheet; for (int l = 0; l < ds.Tables.Count; l++) { var dt = ds.Tables[l]; if (dt != null && dt.Rows.Count > 0) { if (dt.TableName == null) sheet = hssfworkbook.CreateSheet("Sheet" + l.ToString()); else sheet = hssfworkbook.CreateSheet(dt.TableName); int colscount = dt.Columns.Count;//定义表格内数据的列数 ArrayList arr = new ArrayList();//储存头信息 ICellStyle cstyle = hssfworkbook.CreateCellStyle(); IRow rowHeader = sheet.CreateRow(0);//创建列头数据 int displayColumnsCount = 0;//用于处理隐藏列头不被显示 HSSFFont hssffont = hssfworkbook.CreateFont() as HSSFFont; hssffont.FontHeightInPoints = 11; //设置单元格边框 for (int i = 0; i < dt.Columns.Count; i++)//生成表头信息 { ICell cell = rowHeader.CreateCell(displayColumnsCount); cell.SetCellValue(dt.Columns[i].ToString()); sheet.SetColumnWidth(displayColumnsCount, 17 * 256); displayColumnsCount++; arr.Add(dt.Columns[i].ToString()); } for (int i = 0; i < dt.Rows.Count; i++) { IRow irow = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = irow.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); } } } } using (Stream stream = File.OpenWrite(filename)) { hssfworkbook.Write(stream); MessageBox.Show(filename + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { throw new Exception("没有数据可供导出"); } } catch { throw new Exception("操作失败"); } }//DataSet输出Excel } public class ExcelReader { public static DataTable ExcelToDt(string filePath = null, Boolean firstRowNames = true, object sheetTag = null, int RowLimit = -1) { if (filePath == null) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Excel文件(*.xls;*.xlsx;*.csv)|*.xls;*.xlsx;*.csv|所有文件|*.*"; ofd.ValidateNames = true; ofd.CheckPathExists = true; ofd.CheckFileExists = true; if (ofd.ShowDialog() == DialogResult.OK) { filePath = ofd.FileName; //其他代码 } else { return null; } var extension = Path.GetExtension(filePath).ToLower(); if (filePath.Length <= 0 || !(extension == ".xls" || extension == ".xlsx" || extension == ".csv")) { throw new Exception("文件名称错误或者格式错误"); //return null; } int r = 0; } if (sheetTag == null) sheetTag = 0; var ds = ExcelToDs(filePath, firstRowNames); if (sheetTag.GetType() == typeof(int)) return ds.Tables[(int)sheetTag]; else if (sheetTag.GetType() == typeof(string)) { for (int i = 0; i < ds.Tables.Count; i++) { if (sheetTag != null && (string)sheetTag != ds.Tables[i].TableName) continue; return ds.Tables[i]; } } return null; } /// /// 根据Excel返回DataSet /// /// Excel文件地址 /// Sheet索引,可选,默认返回所有Sheet /// DataSet public static DataSet ExcelToDs(string filePath = null, Boolean firstRowNames = true) { DataSet ds; var extension = Path.GetExtension(filePath).ToLower(); using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var sw = new Stopwatch(); sw.Start(); IExcelDataReader reader = null; if (extension == ".xls") { reader = ExcelReaderFactory.CreateBinaryReader(stream); } else if (extension == ".xlsx") { reader = ExcelReaderFactory.CreateOpenXmlReader(stream); } else if (extension == ".csv") { reader = ExcelReaderFactory.CreateCsvReader(stream); } if (reader == null) return null; var openTiming = sw.ElapsedMilliseconds; // reader.IsFirstRowAsColumnNames = firstRowNamesCheckBox.Checked; using (reader) { //ds = reader.AsDataSet(new ExcelDataSetConfiguration() //{ // UseColumnDataType = true, // ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration() // { // UseHeaderRow = firstRowNames // } //}); ds = reader.AsDataSet(new ExcelDataSetConfiguration() { UseColumnDataType = true, ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration() { UseHeaderRow = firstRowNames } }); } } return ds; } public static DataTable GetSheetInfo(string filePath = null, Boolean firstRowNames = true) { DataTable dt; var extension = Path.GetExtension(filePath).ToLower(); using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var sw = new Stopwatch(); sw.Start(); IExcelDataReader reader = null; if (extension == ".xls") { reader = ExcelReaderFactory.CreateBinaryReader(stream); } else if (extension == ".xlsx") { reader = ExcelReaderFactory.CreateOpenXmlReader(stream); } else if (extension == ".csv") { reader = ExcelReaderFactory.CreateCsvReader(stream); } if (reader == null) return null; var openTiming = sw.ElapsedMilliseconds; // reader.IsFirstRowAsColumnNames = firstRowNamesCheckBox.Checked; using (reader) { dt = reader.AsDataSet(new ExcelDataSetConfiguration() { UseColumnDataType = true, ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration() { UseHeaderRow = firstRowNames } }).Tables[0]; } } return dt; } #region 历史 /// /// 根据Excel和Sheet返回DataTable /// /// Sheet索引 /// 0是HSSF,1是XSSF /// DataTable private static DataTable GetDt(int sheetIndex, IWorkbook fileWorkbook, int T) { Random rd = new Random(); DataTable dt = new DataTable(); ISheet sheet = fileWorkbook.GetSheetAt(sheetIndex); //获取数据类型 int tryTime = 3; List Types = new List(); for (int ts = 0; ts < tryTime; ts++) { IRow firstDataRow; if (ts == 0) firstDataRow = sheet.GetRow(sheet.FirstRowNum + 1); else firstDataRow = sheet.GetRow(rd.Next(sheet.FirstRowNum, sheet.PhysicalNumberOfRows)); Boolean HashValue = false; for (int j = 0; j < firstDataRow.LastCellNum; j++) { if (firstDataRow.GetCell(j) != null) HashValue = true; object obj; if (T == 0) obj = GetValueTypeForXLS(firstDataRow.GetCell(j) as HSSFCell); else obj = GetValueTypeForXLS(firstDataRow.GetCell(j) as XSSFCell); if (ts == 0) if (obj == DBNull.Value || obj == null) Types.Add(typeof(string)); else { Types.Add(obj.GetType()); } else if (obj == DBNull.Value || obj == null || obj.ToString() == "") continue; else if (Types[j] != obj.GetType()) Types[j] = typeof(string); } if (!HashValue) ts--; } //表头 IRow header = sheet.GetRow(sheet.FirstRowNum); List columns = new List(); for (int j = 0; j < header.LastCellNum; j++) { object obj; if (T == 0) obj = GetValueTypeForXLS(header.GetCell(j) as HSSFCell, typeof(string)); else obj = GetValueTypeForXLS(header.GetCell(j) as XSSFCell, typeof(string)); if (obj == null || obj.ToString() == string.Empty) { dt.Columns.Add(new DataColumn("Columns" + j.ToString())); } else if (j < Types.Count) dt.Columns.Add(new DataColumn(obj.ToString(), Types[j] == typeof(DateTime?) ? typeof(DateTime) : Types[j])); else dt.Columns.Add(new DataColumn(obj.ToString())); columns.Add(j); } //数据 IEnumerator rows = sheet.GetEnumerator(); int RowIndex = sheet.FirstRowNum + 1; while (rows.MoveNext()) { DataRow dr = dt.NewRow(); bool hasValue = false; foreach (int K in columns) { if (T == 0) dr[K] = GetValueTypeForXLS(sheet.GetRow(RowIndex).GetCell(K) as HSSFCell, Types[K]);//应改写,强制按类型读取 else dr[K] = GetValueTypeForXLS(sheet.GetRow(RowIndex).GetCell(K) as XSSFCell, Types[K]); if (dr[K] != null && dr[K].ToString() != string.Empty) { hasValue = true; } } if (hasValue) { dt.Rows.Add(dr); } RowIndex++; if (RowIndex >= sheet.PhysicalNumberOfRows) break; } return dt; } /// /// 根据Excel返回DataSet /// /// Excel文件地址 /// Sheet索引,可选,默认返回所有Sheet /// DataSet private static DataSet ExcelToDs0(string filePath, object sheetTag = null) { DataSet ds = new DataSet(); IWorkbook fileWorkbook; int T = 1; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { if (filePath.Last() == 's') { try { fileWorkbook = new HSSFWorkbook(fs); T = 0; } catch (Exception ex) { try { fileWorkbook = new XSSFWorkbook(fs); T = 1; } catch { throw (ex); } } } else { try { fileWorkbook = new XSSFWorkbook(fs); T = 1; } catch { fileWorkbook = new HSSFWorkbook(fs); T = 0; } } } if (sheetTag != null)//单个sheet for (int i = 0; i < fileWorkbook.NumberOfSheets; i++) { if (sheetTag.GetType() == typeof(int)) { if (sheetTag != null && (int)sheetTag != i) continue; var dt = GetDt(i, fileWorkbook, T); ds.Tables.Add(dt); } else if (sheetTag.GetType() == typeof(string)) { if (sheetTag != null && (string)sheetTag != fileWorkbook.GetSheetAt(i).SheetName) continue; var dt = GetDt(i, fileWorkbook, T); ds.Tables.Add(dt); } } else//多个sheet { for (int i = 0; i < fileWorkbook.NumberOfSheets; i++) { var dt = GetDt(i, fileWorkbook, T); ds.Tables.Add(dt); } } return ds; } /// /// 根据Excel和Sheet返回DataTable /// /// Excel文件地址 /// Sheet名称 /// DataTable private static DataTable ExcelToDt0(string filePath = null, Boolean firstRowNames = true, object sheetTag = null) { if (filePath == null) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Excel文件(*.xls;*.xlsx)|*.xls;*.xlsx|所有文件|*.*"; ofd.ValidateNames = true; ofd.CheckPathExists = true; ofd.CheckFileExists = true; if (ofd.ShowDialog() == DialogResult.OK) { filePath = ofd.FileName; //其他代码 } else { return null; } var strFileNme = filePath; //strFileNme.LastIndexOf("."); if (strFileNme.Length <= 0 || !(strFileNme.Substring(strFileNme.LastIndexOf(".")).ToLower() == ".xls" || strFileNme.Substring(strFileNme.LastIndexOf(".")).ToLower() == ".xlsx")) { throw new Exception("文件名称错误或者格式错误"); //return null; } int r = 0; } if (sheetTag == null) sheetTag = 0; return ExcelToDs(filePath, firstRowNames).Tables[0]; } #endregion 历史 #region nullable GetDt ///// ///// 根据Excel和Sheet返回DataTable ///// ///// Sheet索引 ///// 0是HSSF,1是XSSF ///// DataTable //private static DataTable GetDt(int sheetIndex, IWorkbook fileWorkbook, int T) //{ // Random rd = new Random(); // DataTable dt = new DataTable(); // ISheet sheet = fileWorkbook.GetSheetAt(sheetIndex); // //获取数据类型 // int tryTime = 3; // List Types = new List(); // for (int ts = 0; ts < tryTime; ts++) // { // IRow firstDataRow; // if (ts == 0) // firstDataRow = sheet.GetRow(sheet.FirstRowNum + 1); // else // firstDataRow = sheet.GetRow(rd.Next(sheet.FirstRowNum, sheet.PhysicalNumberOfRows)); // Boolean HashValue = false; // for (int j = 0; j < firstDataRow.LastCellNum; j++) // { // if (firstDataRow.GetCell(j) != null) HashValue = true; // object obj; // if (T == 0) // obj = GetValueTypeForXLS(firstDataRow.GetCell(j) as HSSFCell); // else // obj = GetValueTypeForXLS(firstDataRow.GetCell(j) as XSSFCell); // if (ts == 0) // if (obj == DBNull.Value || obj == null) Types.Add(typeof(string)); // else // { // Types.Add(GetNullType(obj)); // } // else // if (obj == DBNull.Value || obj == null || obj.ToString() == "") // continue; // else // if (Types[j] != GetNullType(obj)) // Types[j] = typeof(string); // } // if (!HashValue) ts--; // } // //表头 // IRow header = sheet.GetRow(sheet.FirstRowNum); // List columns = new List(); // for (int j = 0; j < header.LastCellNum; j++) // { // object obj; // if (T == 0) // obj = GetValueTypeForXLS(header.GetCell(j) as HSSFCell, typeof(string)); // else // obj = GetValueTypeForXLS(header.GetCell(j) as XSSFCell, typeof(string)); // if (obj == null || obj.ToString() == string.Empty) // { // dt.Columns.Add(new DataColumn("Columns" + j.ToString())); // } // else // if (j < Types.Count) // dt.Columns.Add(new DataColumn(obj.ToString(), Types[j] == typeof(DateTime?) ? typeof(DateTime) : Types[j])); // else // dt.Columns.Add(new DataColumn(obj.ToString())); // columns.Add(j); // } // //数据 // IEnumerator rows = sheet.GetEnumerator(); // int RowIndex = sheet.FirstRowNum + 1; // while (rows.MoveNext()) // { // DataRow dr = dt.NewRow(); // bool hasValue = false; // foreach (int K in columns) // { // if (T == 0) // dr[K] = GetValueTypeForXLS(sheet.GetRow(RowIndex).GetCell(K) as HSSFCell, Types[K]);//应改写,强制按类型读取 // else // dr[K] = GetValueTypeForXLS(sheet.GetRow(RowIndex).GetCell(K) as XSSFCell, Types[K]); // if (dr[K] != null && dr[K].ToString() != string.Empty) // { // hasValue = true; // } // } // if (hasValue) // { // dt.Rows.Add(dr); // } // RowIndex++; // if (RowIndex >= sheet.PhysicalNumberOfRows) break; // } // return dt; //} #endregion /// /// 根据DataTable导出Excel /// /// DataTable /// 保存地址 public static void GetExcelByDataTable(DataTable dt, string file) { DataSet ds = new DataSet(); ds.Tables.Add(dt); GetExcelByDataSet(ds, file); } /// /// 根据DataSet导出Excel /// /// DataSet /// 保存地址 public static void GetExcelByDataSet(DataSet ds, string file) { IWorkbook fileWorkbook = new HSSFWorkbook(); int index = 0; foreach (DataTable dt in ds.Tables) { index++; ISheet sheet = fileWorkbook.CreateSheet("Sheet" + index); //表头 IRow row = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell cell = row.CreateCell(i); cell.SetCellValue(dt.Columns[i].ColumnName); } //数据 for (int i = 0; i < dt.Rows.Count; i++) { IRow row1 = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row1.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); } } } //转为字节数组 MemoryStream stream = new MemoryStream(); fileWorkbook.Write(stream); var buf = stream.ToArray(); //保存为Excel文件 using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write)) { fs.Write(buf, 0, buf.Length); fs.Flush(); } } /// /// 根据单元格将内容返回为对应类型的数据 /// /// 单元格 /// 数据 private static object GetValueTypeForXLS(HSSFCell cell, Type type = null) { DateTime t = DateTime.FromOADate(0); if (cell == null) return DBNull.Value; if (type != null) { if (type == typeof(bool?)) return (Boolean?)cell.BooleanCellValue; if (type == typeof(string)) return cell.ToString(); if (type == typeof(DateTime?)) return TimeExTreat(cell.DateCellValue); if (type == typeof(double?)) return (double?)cell.NumericCellValue; } switch (cell.CellType) { case CellType.Blank: //BLANK: return DBNull.Value; case CellType.Boolean: //BOOLEAN: return (Boolean?)cell.BooleanCellValue; case CellType.String: //STRING: if (DateTime.TryParse(cell.StringCellValue, out t)) return t; else return cell.StringCellValue; case CellType.Numeric: //NUMERIC: if (DateUtil.IsCellDateFormatted(cell)) return TimeExTreat(cell.DateCellValue); else return (double?)cell.NumericCellValue; case CellType.Error: //ERROR: return cell.ErrorCellValue; case CellType.Formula: //FORMULA: default: return "=" + cell.CellFormula; } } /// /// 根据单元格将内容返回为对应类型的数据 /// /// 单元格 /// 数据 private static object GetValueTypeForXLS(XSSFCell cell, Type type = null) { DateTime t = DateTime.FromOADate(0); if (cell == null) return DBNull.Value; if (type != null) { if (type == typeof(bool?)) return (Boolean?)cell.BooleanCellValue; if (type == typeof(string)) return cell.ToString(); if (type == typeof(DateTime?)) return TimeExTreat(cell.DateCellValue); if (type == typeof(double?)) return (double?)cell.NumericCellValue; } switch (cell.CellType) { case CellType.Blank: //BLANK: return DBNull.Value; case CellType.Boolean: //BOOLEAN: return (Boolean?)cell.BooleanCellValue; case CellType.String: //STRING: if (DateTime.TryParse(cell.StringCellValue, out t)) return t; else return cell.StringCellValue; case CellType.Numeric: //NUMERIC: if (DateUtil.IsCellDateFormatted(cell)) return TimeExTreat(cell.DateCellValue); else return (double?)cell.NumericCellValue; case CellType.Error: //ERROR: return cell.ErrorCellValue; case CellType.Formula: //FORMULA: default: return "=" + cell.CellFormula; } } private static DateTime? TimeExTreat(DateTime d) { if (d.Millisecond >= 500) d = d.AddSeconds(1); return (DateTime?)d; } private static Type GetNullType(object obj) { Type Tobject = obj.GetType(); if (Tobject == typeof(double)) Tobject = typeof(double?); if (Tobject == typeof(DateTime)) Tobject = typeof(DateTime?); return Tobject; } private static Type GetNullTypeOf(object obj) { Type Tobject = obj.GetType(); if (Tobject == typeof(double)) Tobject = typeof(double?); if (Tobject == typeof(DateTime)) Tobject = typeof(DateTime?); return Tobject; } } }