在c#中读取excel文件
本文关键字:excel 文件 读取 | 更新日期: 2023-09-27 18:09:38
我有一个excel文件。我想要得到这个的数据。
我使用这个代码。
public static DataTable ConvertToDataTable(ExcelDocument source, bool hasTitle = true)
{
if (source == null)
return null;
// Get range of used data in excel file.
Excel.Range excelCell = source.WorkSheet.UsedRange;
// Get data of range and save it to array.
Object[,] valuesExcel = (Object[,])excelCell.Value2;
if (valuesExcel == null)
return null;
DataTable dataTable = new DataTable();
DataRow dataRow;
// We may have two rows,first for datatable's name and second for datatable's header.
// We check first(datatable's name) is exist.
int startRow = (hasTitle) ? 2 : 1;
int rowIndex;
int columnIndex;
int rowsCount;
int columnsCount;
// Get count of rows.
rowsCount = valuesExcel.GetLength(0);
if (rowsCount != 0)
{
// Get count of columns.
columnsCount = valuesExcel.GetLength(1);
if (columnsCount != 0)
{
for (columnIndex = 1; columnIndex <= columnsCount; columnIndex++)
{
// Create column headrs.
dataTable.Columns.Add(new DataColumn((String)valuesExcel[startRow, columnIndex]));
}
columnsCount = dataTable.Columns.Count;
for (rowIndex = 3; rowIndex <= rowsCount; rowIndex++)
{
// Create new row ,fill it and set cells.
dataRow = dataTable.NewRow();
for (columnIndex = 1; columnIndex <= columnsCount; columnIndex++)
{
// set data for any cells.
dataRow[(String)valuesExcel[startRow, columnIndex]] = valuesExcel[rowIndex, columnIndex];
}
dataTable.Rows.Add(dataRow);
}
}
}
return dataTable;
}
但是rowsCount = valuesExcel.GetLength(0);
和columnsCount = valuesExcel.GetLength(1);
的列和行都是空的
例如,我有一个13行6列的文件。但是当我使用这段代码时,我得到rowcount=34和columncount=20。
我的文件行和列都是空的
您的Excel文件未清理。因为你使用的是UsedRange
,你得到的细胞在某一点上有数据。
你有两个选择:
-
通过打开并实际删除列和行来修复Excel文件。只是删除单元格内容不会做到这一点——它只会使其为空。选择你的行和列,并实际删除它们
-
在代码中添加逻辑,以尝试检测是否应该忽略行或列。
嗯,
我一直需要从excel中获取数据到我的dbs,到目前为止最令人满意的解决方案是CodePlex的excel数据阅读器。我的代码片段:
FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read);
Excel.ExcelBinaryReader reader = Excel.ExcelReaderFactory.CreateBinaryReader(fs) as Excel.ExcelBinaryReader;
reader.IsFirstRowAsColumnNames = true;
DataSet ds = reader.AsDataSet();
foreach (DataRow dr in ds.Tables[0].Rows)
{
;
}
也可以通过
读取xml和excel文件格式CreateOpenXmlReader() method.
它完美地工作。
你应该去看看