Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Excel中读取超过255个字符的数据行_C#_Excel_Oledb - Fatal编程技术网

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

C# 如何从Excel中读取超过255个字符的数据行,c#,excel,oledb,C#,Excel,Oledb,问题是,当我如下图所示设置数据集时,默认值仅读取电子表格单元格中的255个字符,并将它们放入表中 DataSet exData = new DataSet(); string connectionString = String.Format(ConnectionString, path); OleDbDataAdapter ex = new OleDbDataAdapter(ExcelQuery, connectionString); ex.Fill(exData); 我正在使用Extende

问题是,当我如下图所示设置数据集时,默认值仅读取电子表格单元格中的255个字符,并将它们放入表中

DataSet exData = new DataSet();
string connectionString = String.Format(ConnectionString, path);
OleDbDataAdapter ex = new OleDbDataAdapter(ExcelQuery, connectionString);
ex.Fill(exData);
我正在使用ExtendedProperties=Excel8.0和Microsoft.Jet.OLEDB.4.0,连接到Excel工作表没有问题

根据我的阅读,这是由于Jet.OLEDB提供程序,我应该使用什么

我可能无法更新到Jet的新供应商,是否有解决方法?任何解决方法都将受到限制,不能直接修改Excel文档,使其包含两个或更多单元格,用于255个字符以上的数据


谢谢。

同样的问题也有描述。
您不考虑使用Excel interop的具体原因是什么?

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

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

您只需运行Regedit并转到:

32位版本:

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

64位版本:

HKEY\U LOCAL\U MACHINE\SOFTWARE\wow6432node\microsoft\jet\4.0\Engines\Excel

在那里,将类型猜测行更改为0,这样喷气发动机将使用所有行来设置数据类型

来源:

在项目中使用并添加引用。并使用下面的代码读取超过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];
  • 从以下图片可以找到如何添加Excel参考 项目中的库

  • 从VisualStudio的“项目”菜单中选择“添加参考对话框”

  • 选择COM左侧菜单的Microsoft Excel 15.0对象库,然后
    单击“确定”按钮
  • 导入参考库后,我们必须初始化Excel 应用程序对象

        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();
     }
    
    }
    
    使用系统;
    使用System.Windows.Forms;
    使用System.Runtime.InteropServices;
    使用Excel=Microsoft.Office.Interop.Excel;
    命名空间Windows窗体应用程序4
    {
    公共部分类Form1:Form
    {
    公共表格1()
    {
    初始化组件();
    }
    私有无效按钮1\u单击(对象发送者,事件参数e)
    {
    Excel.applicationxlapp;
    Excel.工作簿;
    Excel工作表;
    范围;
    字符串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_项(1);
    range=xlWorkSheet.UsedRange;
    rw=range.Rows.Count;
    cl=range.Columns.Count;
    对于(rCnt=1;rCnt<=rw;rCnt++)
    {
    对于(cCnt=1;cCnt<=cl;cCnt++)
    {
    str=(字符串)(range.Cells[rCnt,cCnt]作为Excel.range.Value2;
    MessageBox.Show(str);
    }
    }
    xlWorkBook.Close(true、null、null);
    xlApp.Quit();
    }
    }
    
    }

由于Interop使用前八列设置限制,数据类型长度将限制为255个字符

解决这个问题的一个快捷方法是,只需在as中创建最长的列即可 excel中的第一列或前八列中的任意一列。以便将限制设置为最长列的限制


感谢您提供Excel互操作的指针!我正在尝试对现有项目进行非常小的更改。如果可以干净地插入互操作,那就太好了。现在不可能进行重大修改。这让我找到了将专栏转换为备忘录的方法。最后我们发现,我们可以简单地强制将包含有问题字符串的行放到文件的顶部。此编辑使该行被视为备忘录,并生成所有信息。谢谢。这个解决问题的方法可能非常有用。我们当时的解决方案是确保对列进行排序,使最大的字符串位于前8行。我们可以从Excel中读取超过255个字符的数据行。这个问题涉及扩展属性的特定场景=Excel 8.0和Microsoft.Jet.OLEDB.4.0我知道一些问题,很多人都知道回答。但我用不同的方式总结了这些东西,以供理解。这是正确的。正如@baguiar指出的,在我给他的回复中,前8列可以强制将字段类型初始化为更长的类型。这是当时最简单的解决方案。不过,如果我没记错的话,Jet的新版本最好支持模式定义。