Получить индекс имени столбца для сопоставления с таблицей данных C# - PullRequest
0 голосов
/ 22 февраля 2020

Я хочу импортировать данные Excel в базу данных. У меня есть Excel, который обновляется командой каждый месяц, и они добавляют новый столбец с именем «Ян формат данных» (название текущего месяца + «формат данных»). который добавляется после столбца за последний месяц.

DataTable dt = new DataTable();
            dt.Columns.Add("SOURCE");
            dt.Columns.Add("DUMMY CODE");
            dt.Columns.Add("CUSTOMER CODE");
            dt.Columns.Add("STK_CODE");

            DataRow row;

            while (((Microsoft.Office.Interop.Excel.Range)wks.Cells[rowIndex, 1]).Value2 != null)
            {
                row = dt.NewRow();
                row[0] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)wks.Cells[rowIndex, colIndex]).Value2);
                row[1] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)wks.Cells[rowIndex, 2]).Value2);
                row[2] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)wks.Cells[rowIndex, 3]).Value2);
                row[3] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)wks.Cells[rowIndex, 4]).Value2);
                index++;

                rowIndex = 2 + index;
                dt.Rows.Add(row);
            }

Здесь row[1] = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)wks.Cells[rowIndex, 2]).Value2); Я использую индекс столбца. Как использовать имя столбца вместо индекса столбца?

1 Ответ

1 голос
/ 24 февраля 2020

Единственный неиндексный идентификатор, который столбец имеет в Excel, - это буква, которую можно увидеть в верхней части столбца: A, B и т. Д. c. Это нельзя изменить.

Любой текст, набранный в ячейке над другими ячейками, который выглядит как заголовок / имя столбца - это просто текст, насколько это касается Excel.

Я использую индекс столбца. Как использовать имя столбца вместо индекса столбца?

Таким образом, не существует такого понятия, как «имя столбца», поэтому нет способа использовать строковую информацию для идентификации столбца.

Было бы необходимо l oop всех ячеек в строке, проверить их значение, чтобы определить столбец, в котором в качестве заголовка столбца указана определенная строка. Что-то вроде

string headerName ="two";
Excel.Worksheet sh = (Excel.Worksheet) excelApp.ActiveSheet;
Excel.Range headerRow = (Excel.Range) sh.UsedRange.Rows[1];
Excel.Range col = null;

foreach(Excel.Range cel in headerRow.Cells)
{
    if (cel.Text.ToString().Equals(headerName))
    {
        col = sh.Range[cel.Address, cel.End[Excel.XlDirection.xlDown]];
        break;
    }
}

foreach(Excel.Range cellInCol in col)
{
    Debug.Print(cellInCol.Value2.ToString());
}
...