使用Oledb读取Excel文件-只将Excel文件的内容视为文本

本文关键字:文件 Excel 文本 Oledb 读取 -只 使用 | 更新日期: 2023-09-27 18:25:35

我正在使用C#和OleDb从Excel2007文件中读取数据。

我使用的连接字符串是:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:'myFolder'myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";

以下是读取excel的代码:

private OleDbConnection con = null;
private OleDbCommand cmd = null;
private OleDbDataReader dr = null;
private OleDbDataAdapter adap = null;
private DataTable dt = null;
private DataSet ds = null;
private string query;
private string conStr;
public MainWindow()
{
    this.InitializeComponent();
    this.query = "SELECT * FROM [Sheet1$]";
    this.conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:''Users''301591''Desktop''Fame.xlsx;Extended Properties='"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text'"";
}
private void btnImport_Click(object sender, RoutedEventArgs e)
{
    this.ImportingDataSetWay();
}
private void ImportingDataSetWay()
{
    con = new OleDbConnection(conStr);
    cmd = new OleDbCommand(query, con);
    adap = new OleDbDataAdapter(cmd);
    ds = new DataSet();
    adap.Fill(ds);
    this.grImport.ItemsSource = ds.Tables[0].DefaultView;
}

这里grImport是我的WPF数据网格,我使用的是自动生成的列。

如何确保存储在Excel中的内容始终作为字符串读取。我不允许修改任何注册表值来实现这一点。有什么更好的阅读excel的方法吗。请引导我。如果你需要任何其他信息,请告诉我。

谨致问候,Priyank

使用Oledb读取Excel文件-只将Excel文件的内容视为文本

您能按如下方式尝试oledb提供程序连接字符串吗。

HDR=NO表示oledb将读取所有行作为数据[NO HEADER]。因此,由于标题列都是文本,它将把所有列中的所有行数据都视为文本。将数据填充到数据集中后,必须删除第一行,因为它不是数据。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:'myFolder'myExcel2007file.xlsx;Extended Properties='"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text'"";

我们发现的一个修复方法是确保第一行包含一个标头。即,确保您的列名在第一行。如果可能的话。

然后在代码中,您必须以编程方式忽略第一行,而同时,如果需要的话,从中删除你的列名。

在连接字符串中使用此项。

     IMEX=1;HDR=NO;

我不确定这个

     TypeGuessRows=0;ImportMixedTypes=Text

我也遇到过类似的问题。。我通过如下字符串中提到的那样拆分连接字符串来解决这个问题。请注意,在扩展属性..之后。。存在(char)34以包围对字符串的IMEX=1的加法。如果不使用(char)34环绕,则会出现错误"找不到ISAM"。希望这能解决ACE提供商和的问题

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                        "Data Source=" + Server.MapPath("UploadedExcel/" + FileName + ".xls") +
                        ";Extended Properties=" +
                        (char)34 + "Excel 8.0;IMEX=1;" + (char)34;