C# 如何从Excel中的单元格中选择值

C# 如何从Excel中的单元格中选择值,c#,excel,merge,command,cells,C#,Excel,Merge,Command,Cells,如何从Excel中的单元格中正确选择值?我知道我的问题是选择单元格的命令 我的脚本: List<string> wsList = new List<string>(); DataTable schemaTable; DataSet da = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter(); string name; string FileName = fullpath; string _Co

如何从Excel中的单元格中正确选择值?我知道我的问题是选择单元格的命令

我的脚本:

List<string> wsList = new List<string>();
DataTable schemaTable;
DataSet da = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter();
string name;
string FileName = fullpath;
string _ConnectionString = string.Empty;
string _Extension = Path.GetExtension(FileName);
// Checking for the extentions, if XLS connect using Jet OleDB
if (_Extension.Equals(".xls", StringComparison.CurrentCultureIgnoreCase))
{
    _ConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0};Extended Properties=Excel 8.0", FileName);
}
// Use ACE OleDb
else if (_Extension.Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
    _ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0", FileName);
}

OleDbConnection con = new OleDbConnection(_ConnectionString);

try
{
    con.Open();
    // Get schematable name from excel file
    schemaTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    foreach (DataRow row in schemaTable.Rows)
        wsList.Add(row.Field<string>("TABLE_NAME"));
    name = wsList[0];
    // Select values from cell in excel
    string strCmd = "SELECT J38 FROM [" + name + "]"; // I think that here is my main problem
    // Command for select value
    OleDbCommand cmd = new OleDbCommand(strCmd, con);

    da.Clear();
    adapter.SelectCommand = cmd;
    adapter.Fill(da);
    UniqueValue.money.Add(double.Parse(da.ToString()));
}

catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

finally
{
    con.Close();
}
List wsList=newlist();
数据表模式化;
数据集da=新数据集();
OleDbDataAdapter=新的OleDbDataAdapter();
字符串名;
字符串文件名=完整路径;
string _ConnectionString=string.Empty;
字符串_Extension=Path.GetExtension(文件名);
//如果XLS使用Jet OleDB连接,则检查扩展
if(_Extension.Equals(“.xls”,StringComparison.CurrentCultureIgnoreCase))
{
_ConnectionString=string.Format(“Provider=Microsoft.Jet.OLEDB.4.0;数据源={0};扩展属性=Excel8.0”,文件名);
}
//使用ACE OleDb
else if(_Extension.Equals(“.xlsx”,StringComparison.CurrentCultureIgnoreCase))
{
_ConnectionString=string.Format(“Provider=Microsoft.ACE.OLEDB.12.0;数据源={0};扩展属性=Excel8.0”,文件名);
}
OLEDB连接con=新的OLEDB连接(_ConnectionString);
尝试
{
con.Open();
//从excel文件中获取schematable名称
schemaTable=con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
foreach(schemaTable.Rows中的DataRow行)
wsList.Add(row.Field(“TABLE_NAME”);
name=wsList[0];
//从excel中的单元格中选择值
string strCmd=“从[“+name+”]”中选择J38;//我认为这是我的主要问题
//用于选择值的命令
OleDbCommand cmd=新的OleDbCommand(strCmd,con);
da.Clear();
adapter.SelectCommand=cmd;
适配器。填充(da);
UniqueValue.money.Add(double.Parse(da.ToString());
}
捕获(例外情况除外)
{
Show(例如ToString());
}
最后
{
con.Close();
}
图像,您可以在其中观看我需要的内容选择:(合并单元格)

调试:

List<string> wsList = new List<string>();
DataTable schemaTable;
DataSet da = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter();
string name;
string FileName = fullpath;
string _ConnectionString = string.Empty;
string _Extension = Path.GetExtension(FileName);
// Checking for the extentions, if XLS connect using Jet OleDB
if (_Extension.Equals(".xls", StringComparison.CurrentCultureIgnoreCase))
{
    _ConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0};Extended Properties=Excel 8.0", FileName);
}
// Use ACE OleDb
else if (_Extension.Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
    _ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0", FileName);
}

OleDbConnection con = new OleDbConnection(_ConnectionString);

try
{
    con.Open();
    // Get schematable name from excel file
    schemaTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    foreach (DataRow row in schemaTable.Rows)
        wsList.Add(row.Field<string>("TABLE_NAME"));
    name = wsList[0];
    // Select values from cell in excel
    string strCmd = "SELECT J38 FROM [" + name + "]"; // I think that here is my main problem
    // Command for select value
    OleDbCommand cmd = new OleDbCommand(strCmd, con);

    da.Clear();
    adapter.SelectCommand = cmd;
    adapter.Fill(da);
    UniqueValue.money.Add(double.Parse(da.ToString()));
}

catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

finally
{
    con.Close();
}

由于未找到一个或多个必需参数,因此没有值

合并的单元格和数据适配器不会混合。如果这是一次性的,请将原始工作表中的值复制到空工作簿中并取消单元格合并,然后手动执行任何其他清理。如果这是一个需要重复和高容量的生产过程,请考虑在工作簿中编写一个VBA宏来为您做CopyPasa/Curruy过程。