excel是什么意思

发布网友 发布时间:2022-04-19 10:06

我来回答

5个回答

懂视网 时间:2022-05-02 15:13

interface IExcelAccess { DataSet Load(ExcelConfig config); }
public class ExcelConfig
 {
 /// <summary>
 /// 文件存储路径
 /// </summary>
 public string Path { get; set; }

 /// <summary>
 /// 文件表头所在行索引
 /// </summary>
 public int HeaderIndex { get; set; }
 }

再来看一下使用NPOI的实现:

public class NpoiExcelAccess : IExcelAccess
 {
 /// <summary>
 /// 根据文件扩展名,获取workbook实例
 /// </summary>
 /// <param name="ext"></param>
 /// <returns></returns>
 private IWorkbook GetWorkBook(string ext, Stream stream)
 {
  IWorkbook workbook = null;

  switch (ext)
  {
  case ".xlsx":
   workbook = new XSSFWorkbook(stream);
   break;
  case ".xls":
   workbook = new HSSFWorkbook(stream);
   break;
  default:
   break;
  }

  return workbook;
 }

 /// <summary>
 /// 加载数据,可设置跳过前几行
 /// </summary>
 /// <param name="path"></param>
 /// <param name="skipRows"></param>
 /// <returns></returns>
 public DataSet Load(ExcelConfig config)
 {
  using (var fileStream = new FileStream(config.Path, FileMode.Open, FileAccess.Read))
  {
  var ds = new DataSet();
  var ext = Path.GetExtension(config.Path);

  // 新建IWorkbook对象 
  var workbook = this.GetWorkBook(ext, fileStream);

  for (int i = 0; i < workbook.NumberOfSheets; i++)
  {
   ISheet sheet = workbook.GetSheetAt(i);
   DataTable dt = GetDataTable(sheet, config.HeaderIndex);
   ds.Tables.Add(dt);
  }

  return ds;
  }
 }

 private DataTable GetDataTable(ISheet sheet, int headerIndex)
 {
  var dt = new DataTable();
  // 获取表头行
  var headerRow = sheet.GetRow(headerIndex);
  var cellCount = GetCellCount(sheet, headerIndex);

  // 设置表头
  for (int i = 0; i < cellCount; i++)
  {
  if (headerRow.GetCell(i) != null)
  {
   dt.Columns.Add(headerRow.GetCell(i).StringCellValue, typeof(string));
  }
  }
  
  for (int i = headerIndex + 1; i <= sheet.LastRowNum; i++)
  {
  IRow row = sheet.GetRow(i);
  DataRow dr = dt.NewRow();
  FillDataRow(row, ref dr);
  dt.Rows.Add(dr);
  }

  dt.TableName = sheet.SheetName;
  return dt;

 }

 private void FillDataRow(IRow row, ref DataRow dr)
 {
  if (row != null)
  {
  for (int j = 0; j < dr.Table.Columns.Count; j++)
  {
   ICell cell = row.GetCell(j);

   if (cell != null)
   {
   switch (cell.CellType)
   {
    case CellType.Blank:
    dr[j] = DBNull.Value;
    break;
    case CellType.Boolean:
    dr[j] = cell.BooleanCellValue;
    break;
    case CellType.Numeric:
    if (DateUtil.IsCellDateFormatted(cell))
    {
     dr[j] = cell.DateCellValue;
    }
    else
    {
     dr[j] = cell.NumericCellValue;
    }
    break;
    case CellType.String:
    dr[j] = cell.StringCellValue;
    break;
    case CellType.Error:
    dr[j] = cell.ErrorCellValue;
    break;
    case CellType.Formula:
    // cell = evaluator.EvaluateInCell(cell) as HSSFCell;
    dr[j] = cell.ToString();
    break;
    default:
    throw new NotSupportedException(string.Format("Catched unhandle CellType[{0}]", cell.CellType));
   }
   }
  }
  }
 }

 /// <summary>
 /// 获取表头列数
 /// </summary>
 /// <param name="sheet"></param>
 /// <param name="skipRows"></param>
 /// <returns></returns>
 private int GetCellCount(ISheet sheet, int headerIndex)
 {
  var headerRow = sheet.GetRow(headerIndex);

  return headerRow.LastCellNum;
 }
 }

 

最后看一下使用OLEDB的实现,这里,我只实现了excel2003的版本,07版本的总是失败,查了原因,是需要在本机安装一个组件才能支持导入.xlsx文件。

 public class OleDbExcelAccess : IExcelAccess
 {
 private string strConn;

 public OleDbExcelAccess()
 {
  //TODO 需要根据扩展名,来决定 使用哪一种连接字符串
  strConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = {0};Extended Properties=‘Excel 8.0;IMEX=1;HDR=NO‘";
 }

 public DataSet Load(ExcelConfig config)
 {
  var ds = new DataSet();
  var sheets = GetSheetNames(config.Path);
  var strConnTmp = string.Format(strConn, config.Path);

  foreach (string sheet in sheets)
  {
  using (var oleConn = new OleDbConnection(strConnTmp))
  {
   var strsql = "SELECT * FROM [" + sheet + "]";
   var oleDaExcel = new OleDbDataAdapter(strsql, oleConn);
   oleConn.Open();
   oleDaExcel.Fill(ds, sheet);
  }
  }

  return ds;
 }

 /// <summary>
 /// 获取Excel的所有的sheet
 /// </summary>
 /// <param name="path"></param>
 /// <returns></returns>
 private string[] GetSheetNames(string path)
 {
  DataTable dt = new DataTable();
  if (File.Exists(path))
  {
  string strConnTmp = string.Format(strConn, path);
  using (var conn = new OleDbConnection(strConnTmp))
  {
   conn.Open();
   //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 
   dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
  }
  //包含excel中表名的字符串数组
  var sheetNames = new List<string>();
  for (int k = 0; k < dt.Rows.Count; k++)
  {
   string tableName = dt.Rows[k]["TABLE_NAME"].ToString();
   //修正出现兼容性视图名称时过滤表名
   if (!tableName.Substring(tableName.Length - 1).Equals("_"))
   {
   sheetNames.Add(tableName);
   }
  }
  return sheetNames.ToArray();

  }
  return null;

 }
 }

 

最后看一下客户端的调用 :

 private void TestExcelImport()
 {
  var excelFile = Path.Combine("C:\Users\hankk\Desktop\ICON", "2003版本.xls");

  ExcelConfig config = new ExcelConfig()
  {
  Path = excelFile,
  HeaderIndex = 1
  };

  IExcelAccess npoiAccess = new NpoiExcelAccess();
  var npoiDs = npoiAccess.Load(config);

  IExcelAccess oleDbAccess = new OleDbExcelAccess();
  var oleDs = oleDbAccess.Load(config);
 }

 

代码已上传到github: https://github.com/hankuikuide/ExcelAccessor

 

Excel转化成DataTable实现:NPOI和OLEDb

标签:book   error   sub   mat   ada   []   实例   add   bin   

热心网友 时间:2022-05-02 12:21

excel释义

Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。

直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。

在1993年,作为Microsoft Office的组件发布了5.0版之后,Excel就开始成为所适用操作平台上的电子制表软件的霸主。

excel函数

在 Excel中,函数实际上是一个预先定义的特定计算公式。

按照这个特定的计算公式对一个或多个参数进行计算,并得出一个或多个计算结果,叫做函数值。使用这些函数不仅可以完成许多复杂的计算,而且还可以简化公式的繁杂程度。

简介

为了满足各种数据处理的要求,Excel提供了大量函数供用户使用,函数是系统预先编制好的用于数值计算和数据处理的公式,使用函数可以简化或缩短工作表中的公式,使数据处理简单方便。

 Excel 2003提供了丰富的函数,如财务函数、日期与时间函数、数值与三角函数、统计函数、查找与引用函数、数据库函数、文字函数、逻辑函数、信息函数等。

热心网友 时间:2022-05-02 13:39

excel
[英][ɪk'sel][美][ɪkˈsɛl]
vt.优于,擅长;
vi.胜过;
Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。

热心网友 时间:2022-05-02 15:14

付费内容限时免费查看回答释义:

vt. 超过;擅长

vi. (在某方面)胜过(或超过)别人

例句:

No one knows what this mysterious person excels in.

没人知道这个神秘人擅长什么。

词组:

excel inv. 在……方面胜过;在……方面很擅长

excel at突出;擅长于

很多人在办公或学习的时候,经常使用到EXCEL电子表格。 那么,您知道电子表格中的EXCEL这个名称,代表什么意思吗? 下面我给您介绍介绍EXCEL这个名称的缘由。 excel不是什么单词的缩写,它本身就是一个单词,不过却是由excellent引申而来的。 EXCEL单词的含义是:优秀的、擅长于、胜于、优于…… 微软公司Microsoft的电子表格,取名为EXCEL,就说明了,微软公司Microsoft自认为EXCEL电子表格是很优秀的。 或者可以这样来理解,微软的人认为,他们的电子表格,优于其它电子表格、胜于其它电子表格,暗示他们的电子表格是最优秀的。因为优于其它人的、胜于其它人的,那么,还有谁能比得过他们的呢? EXCEL不仅代表了微软公司Microsoft对电子表格的研发

热心网友 时间:2022-05-02 17:05

&是连接符 如a1&a2 则将两个单元格连接起来 ""在excel里面表示空值的意思
在excel中一般用到""基本上都是要进行逻辑判断的,在各种程序设计也是这样的。注意单元格是格式是智能的,默认为数值格式,在数值格式中的没有就是0
你参加运算 0&""或者0+0&"" 将这个连接起来看到的还是0。
还有:""也可以表示输入文本 比如在vba代码当中cells(1,1)="你好" 或者cells(1,1)="123"这样都表示文本输入 则 A1单元格的123也就变成文本格式了 。实际上""就是英文的两个引号,引号中间的就是引用文本 中间没有就表示空值(没有)中间空一格 ,如=0&" "&0 结果就是0 0 这样显示的。
如果你逻辑判断一下就不同了,比如:=if((A1+B1)&""=0,"",((A1+B1)&"")这样就返回空值了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com