Пример #1
0
        //============================================================
        protected bool LoadFileRows(Excel.Worksheet worksheet)
        {
            // 检查列表
            if (_columns.IsEmpty)
            {
                return(false);
            }
            Excel.Range cells = worksheet.Cells;
            // 读取头数据
            int    columnIndex = 0;
            string code        = _columns.Value(0).Name;
            string id          = _columns[0].Name;

            for (int n = 1; n < DATA_COL_MAXCNT; n++)
            {
                string name = cells[DATA_NAME_ROW, n].Text;
                if (RString.IsEmpty(name))
                {
                    break;
                }
                if (_columns.Contains(name))
                {
                    FXlsColumn column = _columns.Get(name);
                    column.Index = n;
                    if (name == code)
                    {
                        columnIndex = n;
                    }
                }
            }
            // 计算最大行数和列数
            int   count    = _columns.Count;
            Range rowRange = worksheet.Rows[1];

            object[,] rowValues = rowRange.get_Value();
            int columnCount = 1;

            for (; columnCount < DATA_COL_MAXCNT; columnCount++)
            {
                if (rowValues[1, columnCount] == null)
                {
                    break;;
                }
            }
            string columnCode = "";
            int    ch         = columnCount / 26;
            int    cl         = columnCount % 26;

            if (ch > 0)
            {
                columnCode += (char)('A' + ch - 1);
            }
            columnCode += (char)('A' + cl);
            Range columnRange = worksheet.Columns[columnIndex];

            object[,] columnValues = columnRange.get_Value();
            int rowCount = 1;

            for (; rowCount < DATA_ROW_MAXCNT; rowCount++)
            {
                if (columnValues[rowCount, 1] == null)
                {
                    break;;
                }
            }
            // 获得数据
            Range range = worksheet.get_Range("A3:" + columnCode + rowCount);

            object[,] values = range.get_Value();
            // 转换数据
            for (int r = 1; r <= rowCount; r++)
            {
                FXlsRow row = new FXlsRow();
                for (int n = 0; n < count; n++)
                {
                    FXlsColumn column = _columns.Value(n);
                    int        index  = column.Index;
                    if (index > 0)
                    {
                        object value    = values[r, index];
                        string valueStr = String.Empty;
                        if (null != value)
                        {
                            valueStr = value.ToString();
                            if (!RString.IsEmpty(valueStr))
                            {
                                valueStr = FormatValue(column, valueStr);
                            }
                        }
                        row.Set(column.Name, valueStr);
                    }
                }
                //for(int n = 0; n < count; n++) {
                //   FXlsColumn column = _columns.Value(n);
                //   int index = column.Index;
                //   if(index > 0) {
                //      string value = cells[r, index].Text;
                //      if(!RString.IsEmpty(value)) {
                //         value = FormatValue(column, value);
                //      }
                //      row.Set(column.Name, value);
                //   }
                //}
                if (!row.Contains(code))
                {
                    break;
                }
                if (RString.IsEmpty(row.Get(code)))
                {
                    break;
                }
                _rows.Push(row);
            }
            return(true);
        }