我正在尝试在datatable()中加载带有长数据字符串的excel文件 这是来自excel的示例数据:
将数据加载到数据表中时,我看到它从拨号代码中加载了很少的数字,而没有加载完整的数据。
这是我编写的示例代码:
string sheetName = null;
using (OleDbConnection connection = new OleDbConnection(connString))
{
connection.Open();
sheetName = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)?.Rows[0]["TABLE_NAME"].ToString();
string selectCmd = String.Format("select * from [{0}]", sheetName);
using (OleDbCommand command = new OleDbCommand(selectCmd, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
adapter.Fill(fileData);
}
}
看起来它加载的拨号代码不是全部。
请有人指导我这段代码有什么问题吗?还是我使用的数据类型有问题?
谢谢!
答案 0 :(得分:0)
我无法使用oledb读取值。但是我从nuget安装了EPPLUS。在我读取所有值之后
using (var package = new ExcelPackage(new FileInfo(@"C: \Users\Emre Asus\Desktop\LongExcelDataRead-master\NoRatesFinalPL.xlsx")))
{
ExcelWorksheet workSheet = package.Workbook.Worksheets[1];
for (int i = 1; i < workSheet.Dimension.End.Row ; i++)
{
string value = workSheet.Cells[i, 2].Value.ToString();
}
}
答案 1 :(得分:0)
这是我找到的解决方案:
public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
{
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
{
tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
}
var startRow = hasHeader ? 2 : 1;
for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
DataRow row = tbl.Rows.Add();
foreach (var cell in wsRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
}
return tbl;
}
}
@Emre谢谢您的努力,您已将我指向EPPLUS,并使用EP plus已成功实施了该解决方案。