metridoc.plugins.impl.grid.BaseExcelGrid.groovy Maven / Gradle / Ivy
/*
* Copyright 2010 Trustees of the University of Pennsylvania Licensed under the
* Educational Community License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may
* obtain a copy of the License at
*
* http://www.osedu.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS"
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package metridoc.plugins.impl.grid
import metridoc.plugins.grid.Grid
import metridoc.plugins.grid.FileGridCreator
/**
* Created by IntelliJ IDEA.
* User: tbarker
* Date: 9/16/11
* Time: 9:13 AM
* To change this template use File | Settings | File Templates.
*/
abstract class BaseExcelGrid extends FileGridCreator implements Grid {
/**
* if a sheet name is specified, it trumps any sheet index if specified
*/
String sheetName
/**
* default is 0, will be ignored if a {@link BaseExcelGrid#sheetName} is specified
*/
int sheetIndex = 0
/**
* the number of columns that should be
*/
int columnCount = 0
/**
* indication that the first line contains hasHeaders. If not specified, the excel column hasHeaders are used, ie A,B, etc
*/
boolean hasHeaders = false
/**
* the width of the data; for sparse sheets null will be used for empty cells
*/
int width = 0
/**
* current row number that the grid is on
*/
int rowNum = 0
void remove() {
throw new UnsupportedOperationException("remove is not supported in ${this.getClass()}")
}
protected static int convertColumnToNumber(String column) {
def m = (column =~ /(\D+)\d*/) //strip out row numbers
m.find()
def justColumn = m.group(1)
String lowercase = justColumn.toLowerCase()
def columnNumber = 0
int a = 'a'
for (int i = 0; i < lowercase.size(); i++) {
int power = lowercase.size() - i - 1
int charRelativeTo_a = lowercase.charAt(i) - a + 1
def charInBase26 = (charRelativeTo_a) * (26 ** power)
columnNumber += charInBase26
}
return columnNumber
}
}