Excel in c # lesen, wobei einige Spalten leer sind

Ich habe eine Excel-Vorlage wie diese

und ich habe einige Probleme beim Lesen (ich kann keine Bibliotheken von Drittanbietern verwenden). Meine Lösung

public partial class CaricaDocumento : System.Web.UI.Page
{

    static string HDR; // "Yes" indicates that the first row contains column names, not data
    Regex regex = new Regex("([0-9]+)(.*)");


    protected void Page_Load(object sender, EventArgs e)
    {
        string ind = "C:\\My_Template.xlsx";
        string sheetName = "Page1";

        DataTable dt = FromXLSX(ind, sheetName, true); 

        DataToView(dt);
    }


    // Bind data to the page
    private void DataToView(DataTable dt)
    {
        LblFattura.Text = GetValue("AO10", dt);
        LblDataFattura.Text = GetValue("AX10", dt);
        LblCognomeOrRagioneSociale.Text = GetValue("B18", dt);
        LblNome.Text = GetValue("AB18", dt);
    }


    // return the value from the cell, indicate a code like "A1", "B3", "AO10"...
    public string GetValue(string codeCell, DataTable dt)
    {
        string[] substrings = regex.Split(codeCell);
        string letterString = substrings[0]; // 'A' or 'B' ... 'AZ' ... 
        int letter = ColumnLetterToNumber(letterString); // transform the letter in a column index

        int num = 1;
        if (HDR == "Yes")
            num = 2;

        // if the first row is an header, do -2
        // if the first row is a simple data row, do -1
        int number = Int32.Parse(substrings[1]) - num; // the right row index
        return dt.Rows[number][letter].ToString();
    }


    //  transform the letter in a column index
    public static int ColumnLetterToNumber(string columnName)
    {
        if (string.IsNullOrEmpty(columnName)) throw new ArgumentNullException,("columnName");

        columnName = columnName.ToUpperInvariant();

        int sum = 0;
        for (int i = 0; i < columnName.Length; i++)
        {
            sum *= 26;
            char letter = columnName[i];
            sum += (letter - ('A' - 1));
        }
        sum--;
        return sum;
    }


    // return the DataTable
    public static DataTable FromXLSX(string filePath, string sheet, bool hasHeaders)
    {
        try
        {
            // Create the new datatable.
            DataTable dtexcel = new DataTable();

            // Define the SQL for querying the Excel spreadsheet.
            HDR = hasHeaders ? "Yes" : "No"; // "HDR=Yes;" indicates that the first row contains column names, not data
            string IMEX = "1";

            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath 
                    + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=" + IMEX + ";\"";

            // Create connection:
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();

            if (!sheet.EndsWith("_"))
            {
                // Query data from the sheet
                string query = "SELECT  * FROM [" + sheet + "$]";
                OleDbDataAdapter daexcel = new OleDbDataAdapter(query, conn);
                dtexcel.Locale = CultureInfo.CurrentCulture;

                // Fill the datatable:
                daexcel.Fill(dtexcel);
            }

            // Close connection.
            conn.Close();

            // Set the datatable.
            return dtexcel;
        }
        catch { throw; }
    }
}

Aber ich habe dieses Problem bemerkt: Wenn die Daten nicht in der Spalte 'A' beginnen,the DataTable liest Daten aus der ersten Spalte mit Daten! Ist ein Albtraum für die Indizes. Beispielsweise

... in diesem Fall wird die Spalte 'A' ignoriert (die Datentabelle verwendet Daten ab 'B') und die Verwendung von Zellcodes wird ungültig (wie "A1", "B5", "AO11" ...) weil die MethodeColumnLetterToNumber(string columnName) ist verzerrt.

Jemand weiß, wie ich festlegen kann, dass die DataTable Daten ab der Spalte "A" erhält? Oder alternative Möglichkeiten zum Abrufen von Daten aus Excel mithilfe von Zellcodes?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage