【问题标题】:C# Number of filled column return value 1C#填充列数返回值1
【发布时间】:2020-01-08 11:07:03
【问题描述】:

我知道有几种方法可以根据个人要求找到填充的行和列的总数。我尝试使用 Cells.Find 方法来查找填充的行数和列数的方法之一。我在这里找到了一篇相关的帖子:C# Excel : Correct way to get Rows and Columns count,这正是我所需要的。我复制了格式并替换了变量并且工作正常。但是 lastUsedColumn 的返回值是 1 而不是 4,而 lastUsedRow 返回 5 是完全正确的。我的 Excel 文件的文件格式是 .xls 而不是 .csv。我通过阅读在线文档来学习 C# 已经有一段时间了,但仍然不明白为什么 xlByColumns 在这里不起作用,或者我遗漏了一些东西..?谁能帮忙解释一下..?谢谢。

我的 Excel(.xls) 中的数据示例

0.02 | 1.352 | 2.447 | -3.9924

0.04 | 2.991 | 9.556 | 3.227

0.06 | -9.119 | 1.883 | 2.004

0.08 | 5.382 | -9.003 | 7.441

1.00 | -8.803 | - 6.443 | 7.210

*符号 |表示列,所以一共有4列,一共5行。

Excel.Application app = null; 
Excel.Workbook wb = null;
Excel.Worksheet ws = null;
double lastUsedRow = 0;
double lastUsedColumn = 0;

string FFile = @"C:\Users\Student\Downloads\FFile.xls"; 
StreamWriter rowvalue = File.CreateText(@"C:\Users\Student\Downloads\rowvalue.xls"); 
StreamWriter colvalue = File.CreateText(@"C:\Users\Student\Downloads\colvalue.xls"); 

app = new Excel.Application();
app.Visible = false;
wb = app.Workbooks.Open(FFile, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

ws = (Excel.Worksheet)wb.Worksheets[1];

object missV = System.Reflection.Missing.Value;

// Find the last real row
// Return result 5 (correct)
lastUsedRow = ws.Cells.Find("*", missV, missV, missV, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false, true, missV).Row;

rowvalue.WriteLine(lastUsedRow);

// Find the last real column
// Return result 1 (wrong)
lastUsedColumn = ws.Cells.Find("*", missV, missV, missV, Excel.XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlPrevious, false, true, missV).Column;

colvalue.WriteLine(lastUsedColumn);

【问题讨论】:

  • 我一直使用 Excel.Range last = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);或者如果我需要这些值,请全部阅读并使用数组计数
  • 为什么不使用 ws.UsedRange.Rows.Count 和 ws.UsedRange.Columns.Count ?
  • 您是否使用以 .xls 扩展名保存的文本/csv 文件。用记事本打开文件时看到了什么?
  • @BugFinder 感谢您提出不同方法的贡献,它可能会派上用场!
  • @MarkPM 我知道 ws.UsedRange.Rows.Count 和 ws.UsedRange.Columns.Count 是其中一种方法。我想尝试 Cells.Find 获取号码的方法。解决了:)

标签: c# excel xls


【解决方案1】:

您正在将文本文件导入 Excel,而 Excel 无法识别分隔符。从而将数据从一行读入一列。这些行被转换为一行,这就是为什么你得到正确的行数。

查看您的 .xls 文件(使用记事本)并查看使用的分隔符。将 Open 调用中的 5 替换为正确的号码 as described in the documentation

Value Delimiter
1 Tabs
2 Commas
3 Spaces
4 Semicolons
5 Nothing
6 Custom character (see the Delimiter argument)

【讨论】:

  • 我刚刚才弄明白!是的,这就是解决方案,将 5 替换为 1 给出正确答案。感谢您的帮助,感谢您的时间! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2013-07-17
  • 2016-04-21
  • 1970-01-01
相关资源
最近更新 更多