在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。

我的文件行和列都是空的

在c#中读取excel文件

您的Excel文件未清理。因为你使用的是UsedRange,你得到的细胞在某一点上有数据。

你有两个选择:

  1. 通过打开并实际删除列和行来修复Excel文件。只是删除单元格内容不会做到这一点——它只会使其为空。选择你的行和列,并实际删除它们

  2. 在代码中添加逻辑,以尝试检测是否应该忽略行或列。

嗯,

我一直需要从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.

它完美地工作。

你应该去看看