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