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

本文关键字:字符 数据 Excel 读取 | 更新日期: 2023-09-27 17:56:28

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

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

我正在使用扩展属性=Excel 8.0 和 Microsoft.Jet.OLEDB.4.0,连接到 excel 工作表没有问题。

从我的阅读来看,这是由于Jet.OLEDB提供商,我应该使用什么?

而且我可能无法更新到新的 Jet 提供商,有什么解决方法吗?任何解决方法都将受到限制,因为无法直接修改Excel文档以包含两个或更多单元格,用于超过255

个字符的数据。

谢谢。

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

使用 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];

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

您只需要运行Regedit并转到:

32 位版本:

HKEY_LOCAL_MACHINE''软件''Microsoft''喷气''4.0''引擎''Excel

64 位版本:

HKEY_LOCAL_MACHINE''软件''wow6432node''微软''jet''4.0''引擎''Excel

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

来源:为什么 SSIS 总是弄错 Excel 数据类型,以及如何修复它!

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

这里描述了同样的问题。
您不考虑使用 Excel 互操作的任何具体原因?

  • 形成以下图片,您可以找到如何添加Excel参考项目中的库。

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

  • 选择Microsoft COM 左侧菜单的 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();
     }
    }
    

    }

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

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

如果要使用schema.ini,请对存储大于 255 的字符串使用Memo数据类型而不是 Text