Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用ClosedXML示例将数据从excel导出到数据库表_Database_Excel_Closedxml - Fatal编程技术网

Database 使用ClosedXML示例将数据从excel导出到数据库表

Database 使用ClosedXML示例将数据从excel导出到数据库表,database,excel,closedxml,Database,Excel,Closedxml,我必须从只有一列的excel文件中读取数据行,然后我必须将这些行保存在数据库的表中。 在我的项目中,我必须使用ClosedXML.dll。 我已经搜索过了,但找不到一个例子。 你能帮帮我吗? 感谢关于ClosedXML部分,您可以参考 private static void Main() { 列出类别; 上市公司; 提取分类公司(“NorthwindData.xlsx”,out categories,out companys); //对类别和公司做些什么 } 私有静态void extracted

我必须从只有一列的excel文件中读取数据行,然后我必须将这些行保存在数据库的表中。 在我的项目中,我必须使用ClosedXML.dll。 我已经搜索过了,但找不到一个例子。 你能帮帮我吗?
感谢关于
ClosedXML
部分,您可以参考

private static void Main()
{
列出类别;
上市公司;
提取分类公司(“NorthwindData.xlsx”,out categories,out companys);
//对类别和公司做些什么
}
私有静态void extractedcategoriescompanies(字符串northwinddataXlsx、外部列表类别、外部列表公司)
{
类别=新列表();
const int coCategoryId=1;
const int coCategoryName=2;
var wb=新的XL工作簿(northwinddataXlsx);
var ws=工作表(“数据”);
//查找使用的第一行
var firstRowUsed=ws.firstRowUsed();
//缩小行的范围,使其仅包括使用过的零件
var categoryRow=firstRowUsed.RowUsed();
//移到下一行(它现在有标题)
categoryRow=categoryRow.RowDown();
//获取所有类别
而(!categoryRow.Cell(coCategoryId.IsEmpty())
{
String categoryName=categoryRow.Cell(coCategoryName.GetString();
类别。添加(类别名称);
categoryRow=categoryRow.RowDown();
}
//有很多方法可以获得公司席位。
//这里我们使用一种简单的方法。
//另一种方法是在company表中查找第一行
//通过在row.IsEmpty()时循环
//公司表的第一个可能地址:
var firstPossibleAddress=ws.Row(categoryRow.RowNumber()).FirstCell().Address;
//公司表的最后可能地址:
var lastPossibleAddress=ws.LastCellUsed().Address;
//获取包含工作表剩余数据的范围(使用的范围)
var companyRange=ws.Range(firstPossibleAddress,lastPossibleAddress).RangeUsed();
//将范围视为表(以便能够使用列名)
var companyTable=companyRange.AsTable();
//获取公司名称列表
companys=companyTable.DataRange.Rows()
.Select(companyRow=>companyRow.Field(“公司名称”).GetString()
.ToList();
}
编辑:下面只会为您提供一个填充的数据表。然后需要将该数据表加载到数据库中。您没有说明这是哪个数据库,但对于SQL Server,您将使用
SqlBulkCopy
类(请参阅,其中也有一个示例)

派对迟到了,但试试这个:

public static DataTable GetDataTableFromExcel(string path, string sheetname = "", bool hasHeader = true)
{
  using (var workbook = new XLWorkbook(path))
  {
    IXLWorksheet worksheet;
    if (string.IsNullOrEmpty(sheetname))
      worksheet = workbook.Worksheets.First();
    else
      worksheet = workbook.Worksheets.FirstOrDefault(x => x.Name == sheetname);

    var rangeRowFirst = worksheet.FirstRowUsed().RowNumber();
    var rangeRowLast = worksheet.LastRowUsed().RowNumber();
    var rangeColFirst = worksheet.FirstColumnUsed().ColumnNumber();
    var rangeColLast = worksheet.LastColumnUsed().ColumnNumber();

    DataTable tbl = new DataTable();

    for (int col = rangeColFirst; col <= rangeColLast; col++)
      tbl.Columns.Add(hasHeader ? worksheet.FirstRowUsed().Cell(col).Value.ToString() : $"Column {col}");

    Logger("started creating datatable");

    rangeRowFirst = rangeRowFirst + (hasHeader ? 1 : 0);
    var colCount = rangeColLast - rangeColFirst;
    for (int rowNum = rangeRowFirst; rowNum <= rangeRowLast; rowNum++)
    {
      List<string> colValues = new List<string>();
      for (int col = 1; col <= colCount; col++)
      {
        colValues.Add(worksheet.Row(rowNum).Cell(col).Value.ToString());
      }
      tbl.Rows.Add(colValues.ToArray());
    }

    Logger("finished creating datatable");
    return tbl;
  }
}
如果您正在使用(基本形式的优秀且免费的),您可以使用
datatable.Dump()检查
datatable

public static DataTable GetDataTableFromExcel(string path, string sheetname = "", bool hasHeader = true)
{
  using (var workbook = new XLWorkbook(path))
  {
    IXLWorksheet worksheet;
    if (string.IsNullOrEmpty(sheetname))
      worksheet = workbook.Worksheets.First();
    else
      worksheet = workbook.Worksheets.FirstOrDefault(x => x.Name == sheetname);

    var rangeRowFirst = worksheet.FirstRowUsed().RowNumber();
    var rangeRowLast = worksheet.LastRowUsed().RowNumber();
    var rangeColFirst = worksheet.FirstColumnUsed().ColumnNumber();
    var rangeColLast = worksheet.LastColumnUsed().ColumnNumber();

    DataTable tbl = new DataTable();

    for (int col = rangeColFirst; col <= rangeColLast; col++)
      tbl.Columns.Add(hasHeader ? worksheet.FirstRowUsed().Cell(col).Value.ToString() : $"Column {col}");

    Logger("started creating datatable");

    rangeRowFirst = rangeRowFirst + (hasHeader ? 1 : 0);
    var colCount = rangeColLast - rangeColFirst;
    for (int rowNum = rangeRowFirst; rowNum <= rangeRowLast; rowNum++)
    {
      List<string> colValues = new List<string>();
      for (int col = 1; col <= colCount; col++)
      {
        colValues.Add(worksheet.Row(rowNum).Cell(col).Value.ToString());
      }
      tbl.Rows.Add(colValues.ToArray());
    }

    Logger("finished creating datatable");
    return tbl;
  }
}
var datatable = GetDataTableFromExcel(fileName, sheetName);