n-hanz Ответов: 2

Используйте имя листа вместо первого листа с помощью epplus в C#


Я пытаюсь создать функцию, которая будет считывать данные из определенных листов excel, которые затем будут загружены в соответствующие таблицы в базе данных. Для этого я использую EPPlus в C#.

Текущий рабочий код выглядит примерно так:
public static DataTable GetDataTableFromExcel(string path,bool hasHeader = true)
        {
            using (var pck = new OfficeOpenXml.ExcelPackage())
            {
                using (var stream = File.OpenRead(path))
                {
                    pck.Load(stream);
                }
                var ws = pck.Workbook.Worksheets.First();
                DataTable tbl = new DataTable();
                foreach (var firstRowCell in ws.Cells[1, 1, 1, 
                ws.Dimension.End.Column])
                {
                 tbl.Columns.Add(hasHeader ? firstRowCell.Text : 
                 string.Format("Column {0}", firstRowCell.Start.Column));
                }
                var startRow = hasHeader ? 2 : 1;
                for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
                {
                    var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
                    DataRow row = tbl.Rows.Add();
                    foreach (var cell in wsRow)
                    {
                        row[cell.Start.Column - 1] = cell.Text;
                    }
                }
                return tbl;
            }


Я попытался передать имя файла в виде строки в функцию, но получил ошибку, сказав, что она ожидает идентификатор. Может ли кто - нибудь дать мне идеи о том, как это исправить?

Что я уже пробовал:

public static DataTable GetDataTableFromExcel(string path, string fileN, bool hasHeader = true)
        {
            using (var pck = new OfficeOpenXml.ExcelPackage())
            {
                using (var stream = File.OpenRead(path))
                {
                    pck.Load(stream);
                }
                //var ws = pck.Workbook.Worksheets.First();

                var ws = pck.Workbook.Worksheets.(fileN);
                DataTable tbl = new DataTable();

2 Ответов

Рейтинг:
13

Bryian Tan

Вы можете попробовать что-то вроде

pck.Workbook.Worksheets["Sheet1"];


Maciej Los

5ed!

n-hanz

Спасибо за помощь :)

Рейтинг:
1

Swinkaran

Я бы предпочел получить рабочий лист с помощью индекса,

string FilePath = @"D:\...\path\sample.xlsx";
FileInfo existingFile = new FileInfo(FilePath);
List<Heading> Headings = new List<Heading>();

using (ExcelPackage package = new ExcelPackage(existingFile))
{
   //Get number of sheets, 
    int iSheetsCount = package.Workbook.Worksheets.Count;
    if (iSheetsCount > 0)
    {
           // Get the sheet by index
           ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
           Console.WriteLine("Worksheet name : " + worksheet.Name);
    }
}


n-hanz

Спасибо за информацию. Но, к сожалению, мне нужно использовать имя листа, так как индекс нужного мне листа может постоянно меняться. Единственной константой будет имя.