c# - 使用 DataTable C# 获取要映射的列名索引
问题描述
我想在数据库中导入一个excel数据。我有一个 Excel,每个月都会由团队更新,他们添加了名为“Jan 数据格式”(当前月份名称 +“数据格式”)的新列。在上个月列之后添加。
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);
我使用列索引。如何使用列名代替列索引?
解决方案
在 Excel 中,一列唯一的非索引标识符是在列顶部看到的字母:A
、B
等。这是无法更改的。
就 Excel 而言,在其他单元格上方的单元格中键入的任何文本(看起来像列标题/名称)只是文本。
我正在使用列索引。如何使用列名代替列索引?
因此,没有“列名”之类的东西,因此无法使用字符串信息来标识列。
有必要循环一行中的所有单元格,测试它们的值,以识别具有特定字符串作为列标题的列。就像是
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());
}
推荐阅读
- airflow - 如何在两个节点上运行气流
- r - 使用 persp() 在绘图上绘制多边形
- python - 随着使用更多内核,Python 多处理速度会变慢
- angular - 我想显示来自 firestore 的数据,但我收到错误 Spread types may only be created from object types
- reactjs - 如何在 const 中插入另一个 CSS 并在 reactjs 中从另一个 const 调用
- behavior - 如何使用行为更改按钮背景?
- db2 - DB for z/OS 中的递归查询
- excel - 如何在不更改的情况下将 csv 表复制到 excel 文件中
- django - Django ArrayAgg - 过滤带注释的数组
- django - 使用 Jinja 返回一个组的总和