问题是当我按如下所示设置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个字符的数据的两个或更多单元格,则任何解决方法都将受到限制。
感谢。
答案 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的“项目”菜单中选择“添加引用”对话框
导入参考库后,我们必须初始化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中的第一列或前八列中的任何一列。以便将限制设置为最长列的限制