首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Oledb读取excel文件-将excel文件的内容仅视为文本

使用Oledb读取excel文件-将excel文件的内容仅视为文本
EN

Stack Overflow用户
提问于 2012-02-22 17:16:49
回答 3查看 17.5K关注 0票数 3

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

我使用的连接字符串是:

代码语言:javascript
复制
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";

下面是读取excel的代码:

代码语言:javascript
复制
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 Data-Grid,我使用的是自动生成的列。

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

问候你,Priyank

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-23 16:11:16

你可以尝试oledb提供者连接字符串,如下所示。

HDR=NO意味着oledb将读取所有行作为数据,而不是标题。因此,由于标题列都是文本,所以它会将所有列中的所有行数据视为文本。在将数据填充到DataSet之后,您必须删除第一行,因为它不是数据。

代码语言:javascript
复制
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\"";
票数 7
EN

Stack Overflow用户

发布于 2013-01-29 02:59:32

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

然后,在您的代码中,您必须以编程方式忽略第一行,同时在需要的情况下从第一行中提取列名。

在您的连接字符串中使用它。

代码语言:javascript
复制
     IMEX=1;HDR=NO;

我不确定这一点

代码语言:javascript
复制
     TypeGuessRows=0;ImportMixedTypes=Text
票数 0
EN

Stack Overflow用户

发布于 2013-05-08 22:19:29

我也有类似的问题..我通过拆分以下字符串中提到的connectionstring来解决这个问题。请注意,在扩展属性之后..除了字符串之外,还有(char)34个字符用来括起IMEX=1。如果没有用(char)34括起来,它会给出错误“无法找到ISAM"。我希望这也能解决你的ACE提供商的问题

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9391976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档