如何从超过255个字符的Excel中读取数据行

时间:2011-05-12 14:51:10

标签: c# excel oledb

问题是当我按如下所示设置DataSet时,默认情况下只会从电子表格单元格中读取255个字符并将它们放入表格中。

DataSet exData = new DataSet();
string connectionString = String.Format(ConnectionString, path);
OleDbDataAdapter ex = new OleDbDataAdapter(ExcelQuery, connectionString);
ex.Fill(exData);

我正在使用Extended Properties = Excel 8.0和Microsoft.Jet.OLEDB.4.0,连接到Excel工作表没有问题。

根据我的阅读,它是由于Jet.OLEDB提供商,我应该使用什么?

我可能无法更新到Jet的新提供商,有任何解决方法吗?如果不能直接修改Excel文档以包含超过255个字符的数据的两个或更多单元格,则任何解决方法都将受到限制。

感谢。

6 个答案:

答案 0 :(得分:4)

使用ExcelDataReader并在项目中添加引用。并使用下面的代码来读取超过255列的Excel ...

FileStream stream = File.Open(strFileName, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
excelReader.Close();
return result.Tables[0];

答案 1 :(得分:2)

我在这里遇到了同样的问题,我发现默认情况下,只有前8行用于设置列的类型。如果在第8行以下的任何其他行上有​​一个更大的字符串,它将被截断。

您只需要运行 Regedit 并转到:

32位版本:

<强> HKEY_LOCAL_MACHINE \ SOFTWARE \微软\喷气\ 4.0 \发动机\ Excel中

或者

64位版本:

<强> HKEY_LOCAL_MACHINE \ SOFTWARE \ wow6432node \微软\喷射\ 4.0 \发动机\ Excel中

在那里,将 TypeGuessRows 更改为 0 ,因此Jet引擎将使用所有行来设置数据类型。

来源:Why SSIS always gets Excel data types wrong, and how to fix it!

答案 2 :(得分:1)

同样的问题被描述为here
您为什么不考虑使用Excel互操作的具体原因?

答案 3 :(得分:1)

jet中文本列的标准最大长度为255个字符。我没有尝试过这个,但是如果您创建一个 schema.ini 文件并告诉它您的列是备忘录类型,那么您可以放入更多数据。

答案 4 :(得分:0)

  • 从下面的图片中可以找到如何添加Excel参考 你项目中的图书馆。

  • 从Visual Studio的“项目”菜单中选择“添加引用”对话框

  • 选择COM左侧菜单的Microsoft Excel 15.0对象库和
    单击“确定”按钮
  • 导入参考库后,我们必须初始化Excel application Object。

        using System;
        using System.Windows.Forms;
        using System.Runtime.InteropServices;
        using Excel = Microsoft.Office.Interop.Excel; 
    
    namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
            Excel.Application xlApp ;
            Excel.Workbook xlWorkBook ;
            Excel.Worksheet xlWorkSheet ;
            Excel.Range range ;
    
            string str;
            int rCnt ;
            int cCnt ;
            int rw = 0;
            int cl = 0;
    
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(@"d:\csharp-Excel.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    
            range = xlWorkSheet.UsedRange;
            rw = range.Rows.Count;
            cl = range.Columns.Count;
    
    
            for (rCnt = 1; rCnt  < = rw; rCnt++)
            {
                for (cCnt = 1; cCnt  < = cl; cCnt++)
                {
                    str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
                    MessageBox.Show(str);
                }
            }
    
            xlWorkBook.Close(true, null, null);
            xlApp.Quit();
     }
    
    }
    

    }

答案 5 :(得分:0)

数据类型的长度将限制为255个字符,因为Interop使用前八列来设置限制。

  

解决此问题的捷径是,只需将最长的列设置为   Excel中的第一列或前八列中的任何一列。以便将限制设置为最长列的限制