帮我用C#在form窗体.NET4.5 写一个方法,用于选择excel文件,上传excel文件,并将excel传入datatable,不需要任何引用
时间: 2024-10-15 17:13:47 浏览: 31
在.NET 4.5中,由于缺乏对现代Excel操作的支持,你需要使用System.Data.OleDb和System.IO.File等基础类库来读取Excel文件并将内容转换到DataTable。这里是一个简单的例子,它会打开一个文件对话框让用户选择Excel文件,然后加载数据到DataTable:
```csharp
using System;
using System.Data;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel Files|*.xls;*.xlsx"; // 设置文件过滤器只允许Excel文件
if (openFileDialog.ShowDialog() == DialogResult.OK) // 用户点击"打开"按钮
{
string filePath = openFileDialog.FileName;
LoadExcelIntoDataTable(filePath);
}
}
private DataTable LoadExcelIntoDataTable(string filePath)
{
try
{
DataTable dataTable = new DataTable();
using (OleDbConnection connection = new OleDbConnection($"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath}"))
{
connection.Open();
// 获取Excel工作簿的第一张表
string tableName = GetTableName(connection);
string sql = $"SELECT * FROM [{tableName}]";
using (OleDbCommand command = new OleDbCommand(sql, connection))
{
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
adapter.Fill(dataTable);
}
}
}
return dataTable;
}
catch (Exception ex)
{
MessageBox.Show("Error loading Excel file: " + ex.Message);
return null;
}
}
private string GetTableName(OleDbConnection connection)
{
string tableName = "";
using (OleDbCommand command = new OleDbCommand("SELECT Name FROM [SheetNames]", connection))
{
var reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
tableName = reader.GetString(0);
break;
}
}
}
return tableName;
}
}
```
在这个例子中,我们使用了OleDb连接到Excel文件,获取第一个表格的名称,然后创建SQL查询来读取所有列。注意,这个方法假设每个Excel文件只有一个工作簿且第一个表就是你想要的数据表。
阅读全文