начать заполнение двумерного массива из [0,0] в C # - PullRequest
0 голосов
/ 19 марта 2011

Я получаю информацию из листа Excel, Я хочу взять информацию из листа Excel и вставить ее в массив из 2-х мер, чтобы я мог использовать ее позже. он всегда начинает заполняться из строки [1,1] и игнорирует все остальное. Любая идея, как я могу сделать это, начинается с [0,0]. это код, который я использую.

if ((myStream = openFileDialog1.OpenFile()) != null)
                {
                    using (myStream)
                    {

                        var strs = openFileDialog1.InitialDirectory;
                        var name = openFileDialog1.FileName;

                        var path = strs + name;

                        Excel.Application xlApp;
                        Excel.Workbook xlWorkBook;
                        Excel.Worksheet xlWorkSheet;
                        Excel.Range range;

                        string str = "";
                        int rCnt = 0;
                        int cCnt = 0;

                        xlApp = new Excel.Application();
                        xlWorkBook = xlApp.Workbooks.Open(path, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

                        range = xlWorkSheet.UsedRange;
                        Hashtable myHT = new Hashtable();

                        int countRow = 0;
                        string[,] myArray;
                        myArray = new string[range.Rows.Count, range.Columns.Count];

                        for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
                        {
                            for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
                            {
                                //str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
                                myArray[cCnt, rCnt] = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
                                //MessageBox.Show(str);
                            }
                            countRow++;
                        }

                        label1.Text = Convert.ToString(countRow);

                        xlWorkBook.Close(true, null, null);
                        xlApp.Quit(); 

Ответы [ 3 ]

0 голосов
/ 19 марта 2011

Просто измените строку:

myArray[cCnt, rCnt] = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;

до:

myArray[cCnt - 1, rCnt - 1] = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
0 голосов
/ 19 марта 2011

Мне кажется, что вам просто нужно сместить индексирование в электронную таблицу:

for (int row = 0; row < range.Rows.Count; row++)
{
    for (int column; column < range.Columns.Count; column++)
    {
        // Offset indexing into range.Cells as Excel is 1-based
        Excel.Range range = (Excel.Range) range.Cells[row + 1, column + 1];
        myArray[column, row] = (string) range.Value2;
    }
}

(Я удалил бит countRow, поскольку вы можете получить его из range.Rows.Count. Я также переименовал переменные для ясности и слегка изменил тело цикла).

0 голосов
/ 19 марта 2011

Свойство UsedRange выглядит довольно странно и не всегда возвращает правильный диапазон.Вот ссылка с альтернативой:

http://www.mrexcel.com/archive/VBA/15835.html

...