Excel.Worksheet.Cells имеет обратное поведение?

Привет всем, я испытываю перенесенное поведение при работе с массивом Excel.Worksheet.Cells.

Моя первая ячейка должна быть в [row = 10, column = 3]
Моя вторая ячейка должна быть в [row = 11, column = 17]

Затем, используя эти две ячейки в качестве границ, я создаю диапазон и объединяя его. Как вы можете сказать из значений, отмеченных выше, диапазон должен быть в основном горизонтальным. Итак, чтобы помочь мне, я создал простую вспомогательную функцию, которая объединяет ячейки:

public static void MergeRange(Excel.Worksheet worksheet, int startRowIdx, int startColIdx, int endRowIdx, int endColIdx, bool across = false) { //Get range boundaries. Excel.Range cells = worksheet.Cells; //commented out, resolved code is directly below - N. Miller, 9-24-2013 //Excel.Range topleftCell = cells[startColIdx][startRowIdx]; //Excel.Range bottomrightCell = cells[endColIdx][endRowIdx]; Excel.Range topleftCell = cells[startRowIdx, startColIdx]; Excel.Range bottomrightCell = cells[endRowIdx, endColIdx]; //Merge range. Debug.WriteLine(String.Format("({0}, {1}) to ({2}, {3}).", startRowIdx, startColIdx, endRowIdx, endColIdx)); Excel.Range range = worksheet.get_Range(topleftCell, bottomrightCell); Excel.Interior interior = range.Interior; interior.ColorIndex = XLColor.PERIWINKLE; //JUST HIGHLIGHTS RANGE FOR NOW. //range.Merge(across); //Cleanup Marshal.ReleaseComObject(interior); Marshal.ReleaseComObject(range); Marshal.ReleaseComObject(bottomrightCell); Marshal.ReleaseComObject(topleftCell); Marshal.ReleaseComObject(cells); } 

В приведенном выше коде я выбираю ячейки, которые я хочу, обменивая столбцы и строки. Это, вопреки ожиданиям, приводит к желаемому поведению, но это противоречит документации MSDN:

Рабочий лист MSDN.

В документации MSDN они приводят пример, в котором первая строка указана, затем после нее следует столбец.

Итак, мой вопрос в том, что … что правильно? Должна ли строка быть первой или первым должен быть столбец ? Когда я изменяю свой код, который должен быть связан с документацией MSDN, выделенные ячейки транспонируются.

Если я правильно вас понимаю, тогда, когда вы используете say cells[1][2] тогда это означает A2 В этом случае столбец на первом месте, а затем строка. Если вы напишете его как cells[1,2] вы получите B2 . В этом случае сначала появляется строка, а затем столбец.

То же самое происходит в Excel-VBA. ?Cells(1)(2).address в непосредственном окне дает $A$2 и ?Cells(1,2).address дает $B$1 Если вы чувствуете, что я не понял ваш запрос, пожалуйста, перефразируйте его для меня. ..

Вот полный код для его проверки.

ПРИМЕЧАНИЕ . Протестировано с использованием VS 2010 Ultimate + Excel 2010

 using System; using System.Windows.Forms; using System.IO; using Excel = Microsoft.Office.Interop.Excel; using System.Reflection; Namespace WindowsFormsApplication1 { public partial class Form1 : Form { Public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Excel.Application xlexcel; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = Missing.Value; xlexcel = new Excel.Application(); xlexcel.Visible = true; //~~> Open a File (Change filename as applicable) xlWorkBook = xlexcel.Workbooks.Open("C:\\SomeFile.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); //~~> Set Sheet 1 as the sheet you want to work with xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); Excel.Range cells = xlWorkSheet.Cells; Excel.Range topleftCell = cells[1][2]; MessageBox.Show(topleftCell.Address); topleftCell = cells[1,2]; MessageBox.Show(topleftCell.Address); //~~> Once done close and quit Excel xlWorkBook.Close(false, misValue, misValue); xlexcel.Quit(); //~~> CleanUp releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlexcel); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } } } } 

Скриншот

введите описание изображения здесь

введите описание изображения здесь

  • Как вычислить Cumprinc в C #?
  • Эффективно конвертировать .xslx в .csv в C #?
  • Среда разработки Excel addin
  • Извлечение данных из Excel через потоки
  • Как получить пользовательский объект панели задач в классе управления лентой
  • C # Переупорядочить столбцы таблицы Excel
  • Excel Interop Efficiency получает номер строки со значением в столбце
  • Выбор прямоугольника как Excel в WPF DataGrid
  • Есть ли способ раскрасить выбранные ячейки файла Excel с помощью C #?
  • Круговая диаграмма
  • Способы поиска файла excel в asp.net
  • Interesting Posts

    Решение VBA для столбцов «укладки»

    EXCEL import to sql возвращает NULL для десятичных знаков, когда в типе данных VARCHAR

    Условное форматирование. Как затенять определенное количество ячеек в строке после ввода определенной фазы в определенной ячейке?

    сравнение данных в двух столбцах excel на основе сопоставления столбцов excel

    Использовать собственное свойство внешнего стиля в React

    Вторая дата покажет мне 1-й день в результатах

    VBA, чтобы найти максимальное значение в диаграмме

    Копирование всего листа из основной книги и вставка в другую книгу

    «Для всех i в I» тип ограничений линейного программирования в Excel VBA

    Excel VBA – Вставить из буфера обмена

    Сравните два набора данных excel (рабочие листы) и добавьте значение

    Разделительный разделитель должен иметь значение «,», но возвращаемое значение может включать запятую

    Ошибка выполнения 424 Требуемый объект – VBA + Internet Explorer = Веб-журнал

    Excel – взять продукт из ряда ячеек, вычитаемых из 1

    Как создать хеш-таблицу (я думаю, это называется словарь в VBA) динамических массивов, которые хранят диапазоны в VBA для Excel

    Давайте будем гением компьютера.