//============================================================ 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); }