Database 使用ClosedXML示例将数据从excel导出到数据库表
我必须从只有一列的excel文件中读取数据行,然后我必须将这些行保存在数据库的表中。 在我的项目中,我必须使用ClosedXML.dll。 我已经搜索过了,但找不到一个例子。 你能帮帮我吗?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
感谢关于
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);