如何从 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
个字符的数据。谢谢。
使用 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
。