C# Номер возвращаемого значения заполненного столбца 1 - PullRequest
0 голосов
/ 08 января 2020

Я знаю, что есть несколько подходов, чтобы найти общее количество заполненных строк и столбцов на основе индивидуальных требований. Один из подходов я пытаюсь использовать подход Cells.Find, чтобы найти количество заполненных строк и столбцов. Я нашел один соответствующий пост здесь: C# Excel: правильный способ получить количество строк и столбцов , это именно то, что мне нужно. Я скопировал формат и заменил переменные и работал нормально. Однако возвращаемое значение 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);

1 Ответ

0 голосов
/ 08 января 2020

Вы импортируете текстовый файл в Excel, и Excel не распознает разделители. Тем самым считывая данные из одной строки в один столбец. Строки преобразуются в строки, поэтому вы получаете правильное количество строк.

Посмотрите на свой файл .xls (с помощью Блокнота) и посмотрите, какой символ разделителя используется. Замените 5 из открытого вызова на правильный номер , как описано в документации .

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