【发布时间】: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 获取号码的方法。解决了:)