2017-02-22 15 views
3

Я имею дело с файлами excel в приложении C#.C# Управление диапазоном Excel

Я задаюсь вопросом, почему этот код не работает:

var value1 = ws.Range[ws.Cells[7,4]].Value; 

На данный момент я обнаружил, что это работает отлично:

int i = 7; 
var value1 = ws.Range["D" + i.ToString()].Value; 

ответ

4

Потому что вы не можете перейти к Range() один Cells() собственности , вам необходимо установить его с двумя параметрами Cells():

var value1 = ws.Range[ws.Cells[7,4],ws.Cells[7,4]].Value; 

или (используйте строги клетки собственности):

var value1 = ws.Cells[7,4].Value; 
+0

На самом деле вы можете использовать свойство Range для доступа к одной ячейке или нескольким ячейкам. Второй параметр является необязательным. Проверьте https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.range.aspx –

+0

«A1» не является свойством ячеек «A1» в ячейках «ws.Range» [ws.Cells [1,1], ws.Cells [1,1]] ', когда вы передаете строку, вы можете передать один параметр, а другая перегрузка, использующая ячейки, требует 2 параметра – jonathana

+0

Неверно, второй параметр - ** необязательно ** –

1

попробовать это, я надеюсь, что это поможет вам

using Excel = Microsoft.Office.Interop.Excel; 
var value1 =(ws.Cells[7, 4] as Excel.Range).Value; 
2

Первый параметр ws.Range[] должен находиться в A1 стиле нотации

Чтобы получить доступ к

ws.Cells[7,4] 

вы можете попробуйте этот код:

var value1 = ws.Range["D7"].Value; 

И проверить this.

+0

Спасибо за ваш ответ, просто исправление для будущих посетителей: 'var value1 = ws.Диапазон ["D7"]. Значение; ' – Zag

+0

Хорошо, я обновлю ответ. –

1
operator Example 
Range  A1:A1 
Union  A1,A1 
Intersect A1 A1 

Что заставляет меня думать, что в теории .Range должен требовать 2 Range параметров как Application.Union и Application.Intersect сделать, но, к счастью, он принимает почти любое строковое выражение, которое работает в адресной строке Excel. Например:

string address = ws.Range["offset(a1,1,2,3,4)"].Address[0, 0]; // "C2:F4" 

Кроме того, ws.Cells[7,4] является Range.Range(Range) так не имеет особого смысла.

Смежные вопросы