gpt4 book ai didi

C#读取excel文件忽略第一行

转载 作者:行者123 更新时间:2023-12-04 21:55:34 29 4
gpt4 key购买 nike

我正在使用 OLEDB 阅读 Excel文件。阅读后我将其保存到 DataSet以供将来使用。

以下代码工作得很好,但总是 忽略 Excel 的第一行文件。
这怎么可能解决?
请忽略评论和异常的文本。
有结果的屏幕(我正在显示结果 DatatSet 的第一个 DataTableDevExpress GridView
Screens

public static class ExcelHelperFasad
{
/// <summary>
/// Прочитать excel'евский файл и вернуть DataSet с заполненными DataTable'ами для каждой страницы.
/// </summary>
/// <param name="filename">Имя файла.</param>
/// <returns></returns>
public static DataSet OpenExcelFile(string filename)
{
if (File.Exists(filename) == false)
throw new MyException("Файл не существует : " + filename);

var dataTables = new List<DataTable>();

var sheets = ListSheetInExcel(filename);

if (sheets.Count == 0)
throw new MyException("В Excel файле не найдено ни одной страницы. Проверьте файл на наличие страниц : " + filename);

foreach (var sheet in sheets)
{
var dataTable = LoadWorksheetInDataTable(filename, sheet);

dataTables.Add(dataTable);
}

var dataSet = new DataSet(Path.GetFileName(filename));

foreach (var dataTable in dataTables)
dataSet.Tables.Add(dataTable);

return dataSet;
}

/// <summary>
///
/// </summary>
/// <param name="fileName"></param>
/// <param name="sheetName"></param>
/// <returns></returns>
private static DataTable LoadWorksheetInDataTable(string fileName, string sheetName)
{
var sheetData = new DataTable(sheetName);
using (var conn = ReturnConnection(fileName))
{
conn.Open();
// retrieve the data using data adapter
var sheetAdapter = new OleDbDataAdapter("select * from [" + sheetName + "]", conn);
sheetAdapter.Fill(sheetData);
}
return sheetData;
}

/// <summary>
/// OLEDB коннекшон.
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
private static OleDbConnection ReturnConnection(string fileName)
{
return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + "; Jet OLEDB:Engine Type=5;Extended Properties=\"Excel 8.0;\"");
}

/// <summary>
/// Список страниц.
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
private static List<string> ListSheetInExcel(string filePath)
{
var sbConnection = new OleDbConnectionStringBuilder();
var strExtendedProperties = string.Empty;
sbConnection.DataSource = filePath;
if (Path.GetExtension(filePath).Equals(".xls"))//for 97-03 Excel file
{
sbConnection.Provider = "Microsoft.Jet.OLEDB.4.0";
strExtendedProperties = "Excel 8.0;HDR=Yes;IMEX=1";//HDR=ColumnHeader,IMEX=InterMixed
}
else if (Path.GetExtension(filePath).Equals(".xlsx")) //for 2007 Excel file
{
sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
strExtendedProperties = "Excel 12.0;HDR=Yes;IMEX=1";
}
else
throw new MyException("Ошибка чтения Excel файла. Необходимо сконвертировать Ваш файл в \".xlsx\" или \".xls\" формат.");

sbConnection.Add("Extended Properties", strExtendedProperties);
var listSheet = new List<string>();
using (var conn = new OleDbConnection(sbConnection.ToString()))
{
conn.Open();
var dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
foreach (DataRow drSheet in dtSheet.Rows)
{
if (drSheet["TABLE_NAME"].ToString().Contains("$"))//checks whether row contains '_xlnm#_FilterDatabase' or sheet name(i.e. sheet name always ends with $ sign)
listSheet.Add(drSheet["TABLE_NAME"].ToString());
}
}
return listSheet;
}
}

最佳答案

在 strExtendedProperties 中将“HDR”更改为“No”:

    if (Path.GetExtension(filePath).Equals(".xls"))//for 97-03 Excel file
{
sbConnection.Provider = "Microsoft.Jet.OLEDB.4.0";
strExtendedProperties = "Excel 8.0;HDR=No;IMEX=1";//HDR=ColumnHeader,IMEX=InterMixed
}
else if (Path.GetExtension(filePath).Equals(".xlsx")) //for 2007 Excel file
{
sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
strExtendedProperties = "Excel 12.0;HDR=No;IMEX=1";
}
else
throw new MyException("Ошибка чтения Excel файла. Необходимо сконвертировать Ваш файл в \".xlsx\" или \".xls\" формат.");

否则,它将始终将第一行解释为列名。

关于C#读取excel文件忽略第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350278/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com