Excel interopライブラリなしでExcelファイルをDataTableに読み込んでいます。 DataTableから私はいくつかの値とそのアドレスをExcelと比較して調べる必要があります。C#Interop DLLなしで行番号と列番号からExcellセルアドレスを作成
例dt.Rows [7] .ItemArray [1] .ToString()の値がわかりましたので、excelのアドレスは "B8"にしてください。
DataTableのセルアドレスをExcelのセルアドレスに変換する必要があるように、
ここに私のコードは、Excelファイルを読み取るために使用されます。
public DataTable getExcelSheet(string filePath, string sheetName)
{
var ds = new DataSet();
var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; ;
using (var conn = new OleDbConnection(connectionString))
{
conn.Open();
var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM [" + sheetName + "] ";
var adapter = new OleDbDataAdapter(cmd);
ds = new DataSet();
adapter.Fill(ds);
}
conn.Close();
}
return ds.Tables[0];
}
この関数は、データテーブル
public String getTablePosition(DataTable dataTable, String value)
{
string cell = "";
for (int rows = 0; rows < (dataTable.Rows.Count < 100 ? dataTable.Rows.Count : 100); rows++)
{
for (int cols = 1; cols < (dataTable.Columns.Count < 100 ? dataTable.Columns.Count : 100); cols++)
{
if (dataTable.Rows[rows].ItemArray[cols].ToString() == value)
{
return "" //here cell I need cell address like B8 or CQ15
}
}
}
return "";
}
からの値は、誰もがこの中で私を助けることができる見つけることですか?私はExcelのinteropライブラリを使用せずにこれを行う必要があります。
何をしますか?列を繰り返しますか?または、値に基づいてセルを選択しますか? – FortyTwo
関数getTablePosition()を参照してください。これは、データテーブルから値を見つけます。セルが一致すると、そのアドレスがExcelの形式で欲しいと思います。 例dt.Rows [7] .ItemArray [1] .ToString()の値が、B8のアドレスを返すよりも大きかった。 –
あなたのクエリ 'SELECT * FROM [MySheet $ A1:C20]'を更新してください。これで、ヘッダーが有効か無効かに応じて列と行のインデックスを計算できるように範囲がわかりました。 – FortyTwo