Import Excel Rows, Columns into List

后端 未结 2 1507
眼角桃花
眼角桃花 2021-01-23 21:20

I am looking for a way to import certain elements of an Excel sheet into a List. My goal is to be able to sort the attributes (first row) of the excel sheet (click on the attrib

相关标签:
2条回答
  • 2021-01-23 21:46

    Working Copy for retrieving 2 rows and open excel with Pwd Protected

    class Program
    {
        static void Main(string[] args)
        {
            Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkBook = xlApp.Workbooks.Open("YourPath", ReadOnly: true, Password: "PWD");
            Excel._Worksheet xlWorksheet = xlWorkBook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;
    
            int rCnt;
            int rw = 0;
            int cl = 0;
    
            //get the total column count
            cl = xlRange.Columns.Count;
    
            List<MyRow> myRows = new List<MyRow>();
            for (rCnt = 1; rCnt <= 1; rCnt++)
            {
                if (rCnt % 6 == 1)
                {//get rows which ABC or XYZ is in
    
                    for (int col = 2; col <= cl; col++)
                    {//traverse columns (the first column is not included)
    
                        for (int rowABCD = rCnt; rowABCD <= rCnt + 5; rowABCD++)
                        {//traverse the following four rows after ABC row or XYZ row
                            MyRow myRow = new MyRow();
                            //get ABC or XYZ
                            myRow.Col1 = (string)(xlRange.Cells[rowABCD, 1] as Range).Value2.ToString();
                            // get the  value of current column  in ABC row or XYZ row
                            myRow.Col2 = (string)(xlRange.Cells[rowABCD, col] as Range).Value2.ToString();
                            // add the newly created myRow to the list
                            myRows.Add(myRow);
                        }
                    }
                }
            }
            xlApp.Quit();
        }
    
        public class MyRow
        {
            public string Col1 { get; set; }
            public string Col2 { get; set; }
        }
    }
    
    0 讨论(0)
  • 2021-01-23 22:03

    I would implement what you want this way without using Sheet Interface but Worksheet class object.

    One thing to note is I am closing the excel sheet after I get all the used range in 2-d array. This makes it faster otherwise the reading from range will be a lot slower. There could be a lot many ways to make it even faster.

    Application xlApp = new Application();
    Workbook xlWorkBook = null;
    Worksheet dataSheet = null;
    Range dataRange = null;
    List<string> columnNames = new List<string>();
    object[,] valueArray;
    
    try
    {
        // Open the excel file
        xlWorkBook = xlApp.Workbooks.Open(fileFullPath, 0, true);
    
        if (xlWorkBook.Worksheets != null
            && xlWorkBook.Worksheets.Count > 0)
        {
            // Get the first data sheet
            dataSheet = xlWorkBook.Worksheets[1];
    
            // Get range of data in the worksheet
            dataRange = dataSheet.UsedRange;
    
            // Read all data from data range in the worksheet
            valueArray = (object[,])dataRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
    
            if (xlWorkBook != null)
            {
                // Close the workbook after job is done
                xlWorkBook.Close();
                xlApp.Quit();
            }
    
            for (int colIndex = 0; colIndex < valueArray.GetLength(1); colIndex++)
            {
                if (valueArray[0, colIndex] != null
                    && !string.IsNullOrEmpty(valueArray[0, colIndex].ToString()))
                {
                    // Get name of all columns in the first sheet
                    columnNames.Add(valueArray[0, colIndex].ToString());
                }
            }
        }
    
        // Now you have column names or to say first row values in this:
        // columnNames - list of strings
    }
    catch (System.Exception generalException)
    {
        if (xlWorkBook != null)
        {
            // Close the workbook after job is done
            xlWorkBook.Close();
            xlApp.Quit();
        }
    }
    
    0 讨论(0)
提交回复
热议问题