Как динамически добавлять (или) вставлять значения в столбец данных в C #? - PullRequest
0 голосов
/ 18 июня 2019

Я перебираю файл Excel по ячейкам.Каждый файл имеет свое количество столбцов.На основе количества ячеек Excel мы динамически создаем столбцы таблицы данных.Эта часть работает нормально.

Мне нужно будет вставить каждое значение ячейки в столбец данных.Как динамически добавлять (или) вставлять значения в столбец данных в c #?

В предположении, что файл Excel имеет 2 строки и 3 столбца

FirstName LastName Location
---------------------------
Albert     B         Miami
Jackson    C         Tampa

Мне нужно будет заполнить таблицу данных/ столбец данных с этими значениями ячеек.Итерация цикла Foreach работает нормально и подбирает каждое значение ячейки.Я застрял при вставке каждого значения ячейки в столбец данных / строку данных.

int iCellCount = 3;  // In this example, i am defining cell count = 3 as static value. In the real time, cell count is picked from the excel file.
var cellValue = string.Empty;
DataTable dt = new DataTable();
foreach (ExcelReportCell excelCell in excelRow) // Iterating the excel cell row by row in the Excel Sheet
{
    cellValue = excelCell.GetText().ToString(); // cellValue is assigned dynamically through excel file cell by cell iteration logic
    for (int i = 1; i <= iCellCount; i++)
    {
        dt.Columns.Add();
        // Expected to assign each column values
    }
}

Ответы [ 3 ]

1 голос
/ 18 июня 2019

Здесь я предполагаю, что ваши столбцы уже добавлены. Вы можете попробовать это.

int iCellCount = 3;  // In this example, i am defining cell count = 3 as static value. In the real time, cell count is picked from the excel file.
var cellValue = string.Empty;
DataTable dt = new DataTable();
DataRow row;  //Create a DataRow
foreach (ExcelReportCell excelCell in excelRow) // Iterating the excel cell row by row in the Excel Sheet
{
                    cellValue = excelCell.GetText().ToString(); // cellValue is assigned dynamically through excel file cell by cell iteration logic
                    for (int i = 1; i <= iCellCount; i++)
                    {
                        row = dt.NewRow();
                        row["Your_Column_Name_Here"] = cellValue;
                        dt.Rows.Add(row);
                     }
}
1 голос
/ 18 июня 2019

Вам необходимо добавить все столбцы (сделать метод независимым от имени столбца, чтобы не было жестко закодированных строк), а затем добавить все соответствующие значения.

DataTable dt = new DataTable();
List<string> colList = new List<string>();

// Loop through column collection 
// Add all your columns to data table first
foreach (ExcelReportColumn eachColumn in excelColumn)
{
    dt.Columns.Add(eachColumn, typeof(string));
    colList.Add(eachColumn);
}

DataRow newRow;
int currentCol = 0;
// Then add your data rows
foreach (ExcelReportCell excelCell in excelRow)
{
    newRow = dt.NewRow();
    // Magic Method: You need to know the column name for the the current cell
    string columnName = colList[currentCol]; 
    newRow[columnName] = excelCell;
    dt.Rows.Add(newRow);
    currentCol++;
}
0 голосов
/ 18 июня 2019

Так как вы не можете использовать linq, то вот нам другое решение

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

var rowIndex =0;
forech (var row in excelrows){
DataRow dtRow= null;
var cellIndex = 0;
foreach (ExcelReportCell cell in row){
if (rowIndex ==0) // generate the columns
{
dt.Columns.Add(new ColumnData(cell.GetText().ToString()));
}else { // the columns has already been generated then generate the row
 dtRow = dtRow?? dt.NewRow();
 dtRow[cellIndex] = cell.GetText(); 
 }
cellIndex++;
}
if (dtRow != null)
  dt.Rows.Add(dtRow);

rowIndex ++;
}
...