【发布时间】:2012-01-30 14:10:31
【问题描述】:
我之前成功将Excel转换为数据表,但是现在,我的表格格式很奇怪,下图将显示excel表格,以及我想要实现的表格。
var workbook = Workbook.Load("file.xls");
var worksheet = workbook.Worksheets[0];
var cells = worksheet.Cells;
var dataTable = new DataTable("datatable");
for (int colIndex = cells.FirstColIndex; colIndex <= cells.LastColIndex; colIndex++)
{
dataTable.Columns.Add(cells[0, colIndex].StringValue);
}
for (int rowIndex = cells.FirstRowIndex; rowIndex <= cells.LastRowIndex; rowIndex++)
{
var values = new List<string>();
foreach(var cell in cells.GetRow(rowIndex))
{
values.Add(cell.Value.StringValue);
}
dataTable.LoadDataRow(values.ToArray(), true);
}
这是代码。当我将它与提到的 .xls 一起使用时,我得到“价格:行左移。 示例:http://i.imgur.com/QUngL.png 因此,任何有关如何解决此问题的帮助都非常受欢迎。 谢谢。
【问题讨论】:
-
当你调试这个时 colIndex 上的整数位置是什么听起来你在某处有一个 1 的计数。在 rowIndex 上你确定你是从 0 开始它们还是你想开始它们基于它找到的第一个 rowIndex 或 colIndex 而不是 LastColIndex 你能以某种方式获取列 Count 以使其更精确
-
行 A 被 2 x 2 个单元格合并。当我以这种方式将其转换为数据表时,这双行未合并,值转到上单元格,下单元格为空,因此第二行向左移动。我添加了示例。
-
你可以尝试一些不同的东西吗..我想粘贴并稍微改变你的代码..每个foreach循环我都会有评论解释好
-
我粘贴了下面的代码,但是您必须将 DataTable dt 传递给您的方法,或者像下面显示的那样创建它。试试看.. 还要确保循环查看双精度值是什么,如果它们真的被转换为字符串,我还会将代码包装在 Try Catch 周围,以便您可以捕获任何类型转换错误..跨度>
-
谢谢。我会尽力。告诉我要添加到“使用”中的内容。谢谢。
标签: c# excel datatable excellibrary