【问题标题】:start filling a two dimensional array from [0,0] in C#在 C# 中从 [0,0] 开始填充二维数组
【发布时间】:2011-07-18 17:26:51
【问题描述】:

我正在从 Excel 工作表中检索信息, 我想从 excel 表中获取信息并将其插入到一个 2 dementional 数组中,以便我以后可以使用它。 它总是从行 [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(); 

【问题讨论】:

    标签: c# excel multidimensional-array


    【解决方案1】:

    只需换行:

    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;
    

    【讨论】:

    • 感谢您的帮助 :) 成功了 :)
    【解决方案2】:

    UsedRange 属性显然很古怪,并不总是返回正确的范围。这是一个替代链接:

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

    【讨论】:

      【解决方案3】:

      在我看来,您只需要将索引偏移到电子表格中:

      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 获得它。为了清晰起见,我还重命名了变量,并稍微重构了循环体。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-23
        • 2018-04-13
        • 2016-05-27
        • 1970-01-01
        • 2012-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多