我正在获取特定目录中的excel文件列表,如下所示
public void GetFilesList()
{
ListFiles = Directory.GetFiles(DefaultDirectory, "*.xlsx", SearchOption.AllDirectories);
foreach (string FilePath in ListFiles)
{
ImportExcel(FilePath);
}
}
然后我尝试将该目录中每个文件的行添加到我的datagridview
中,如下所示
public void ImportExcel(string FilePath)
{
string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";";
OleDbConnection Conn = new OleDbConnection(ConnStr);
OleDbDataAdapter DA = new OleDbDataAdapter("select * from [Sheet1$]", Conn);
DataTable dt = new DataTable();
if (dataGridView1.Rows.Count == 0)
{
DA.Fill(dt);
dataGridView1.DataSource = dt;
//Calculate record counts
L_Total_Rows.Text = "count: " + dataGridView1.Rows.Count.ToString("n0");
Conn.Close();
}
else
{
foreach (DataRow dr in dt.Rows)
{
dataGridView1.Rows.Add(dr);
dataGridView1.DataSource = dt;
}
}
}
我的问题是它只导入行一个excel文件 它不会进入其他条件它只进入if条件然后停止导入
另外一个问题是不要在查询[Sheet1 $]上使用工作表名称?我不知道纸张索引是否可能?
我可以开始导入excel文件格式特定行,如第四行excel文件吗?
答案 0 :(得分:2)
如何将结果集首先合并到一个数据表中:
DataTable dt = new DataTable();
using(OleDbDataAdapter a1 = new OleDbDataAdapter("select * from [Sheet1$]", Conn))
a1.Fill(dt);
using(OleDbDataAdapter a2 = new OleDbDataAdapter("select * from [Sheet1$]", Conn))
a2.Fill(dt);
答案 1 :(得分:0)
通过将DataTable dt = new DataTable();
移到课程开头来解决问题,因为每次调用ImportExcel(FilePath)
方法时,它都会构建新的datatable
,因此会删除所有旧数据并创建新的datatable
并将我的方法更改为
public void ImportExcel(string FilePath)
{
string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";";
OleDbConnection Conn = new OleDbConnection(ConnStr);
OleDbDataAdapter DA = new OleDbDataAdapter("select * from [Sheet1$]", Conn);
DA.Fill(dt);
DGV_Data.DataSource = dt;
//Calculate record counts
L_Rows_Count.Text = "Count: " + (DGV_Data.Rows.Count - 1).ToString("n0");
Conn.Close();
}
现在有一个小问题仍然让我讨厌,它会在每个导入的Excel文件之间的datagriview
处插入一个空行