`
DavyJones2010
  • 浏览: 151835 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java POI: Column Name & Column Index Conversion Utility

阅读更多

1. CellReferenceUtil

package edu.xmu.excel.util;

public class CellReferenceUtil
{

    /**
     * Input Coordination: C<br/>
     * Output Column Number: 2<br/>
     * 
     * @param coordName
     * @return colIndex: 0 based index
     */
    public static int getColIndex(String colName)
    {
        colName = colName.toUpperCase();

        int value = 0;
        for (int i = 0; i < colName.length(); i++)
        {
            int delta = colName.charAt(i) - 64;
            value = value * 26 + delta;
        }
        int colIndex = value - 1;
        return colIndex;
    }

    /**
     * Input column index: 2 <br/>
     * Output column name: C <br/>
     * 
     * @param colIndex
     * @return
     */
    public static String getColName(int colIndex)
    {
        int quotient = (colIndex) / 26;

        if (quotient > 0)
        {
            return getColName(quotient - 1) + (char) ((colIndex % 26) + 65);
        }
        else
        {
            return "" + (char) ((colIndex % 26) + 65);
        }
    }

    /**
     * Input coord: C8<br/>
     * Output Row Number: 7<br/>
     * 
     * @param coordName
     * @return rowIndex starts with 0
     */
    public static int getRowIndex(String rowName)
    {
        int rowIndex = Integer.parseInt(rowName) - 1;
        return rowIndex;
    }

    /**
     * Input rowIndex: 7 <br/>
     * Output rowName: 8 <br/>
     * 
     * @param rowIndex
     * @return
     */
    public static String getRowName(int rowIndex)
    {
        int rowName = rowIndex + 1;
        return String.valueOf(rowName);
    }

    /**
     * Input pos: col = 2, row = 7<br/>
     * Output coord: C8<br/>
     * 
     * @param colIndex
     * @param rowIndex
     * @return
     */
    public static String getCoordName(int colIndex, int rowIndex)
    {
        String colName = getColName(colIndex);
        String rowName = getRowName(rowIndex);

        return colName + rowName;
    }

    /**
     * Input coordName: C8 <br/>
     * Output colIndex: 2 <br/>
     * 
     * @param coordName
     * @return colIndex: Starts with 0
     */
    public static int getColIndexByCoordName(String coordName)
    {
        String[] colAndRowName = splitColAndRow(coordName);
        String colName = colAndRowName[0];
        return getColIndex(colName);
    }

    /**
     * Input coordName: C8 <br/>
     * Output rowIndex: 7 <br/>
     * 
     * @param coordName
     * @return rowIndex: 0 based index
     */
    public static int getRowIndexByCoordName(String coordName)
    {
        String[] colAndRowName = splitColAndRow(coordName);
        String rowName = colAndRowName[1];
        return getRowIndex(rowName);
    }

    /**
     * Input coordName: C8 <br/>
     * Output : String[]{C, 8} <br/>
     * 
     * @param coordName
     * @return
     */
    private static String[] splitColAndRow(String coordName)
    {
        int rowNumStartIndex = 0;
        for (int i = 0; i < coordName.length(); i++)
        {
            char ch = coordName.charAt(i);
            if (Character.isDigit(ch))
            {
                rowNumStartIndex = i;
                break;
            }
        }

        String colName = coordName.substring(0, rowNumStartIndex);
        String rowName = coordName.substring(rowNumStartIndex);

        return new String[]
        { colName, rowName };
    }
}

 

2. Test case:

package edu.xmu.excel.util;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class CellReferenceUtilTest
{
    /**
     * Test method for
     * {@link edu.xmu.excel.util.CellReferenceUtil#getColIndex(String)}
     */
    @Test
    public void getColIndexTest()
    {
        int colIndex = CellReferenceUtil.getColIndex("A");
        assertEquals(0, colIndex);

        colIndex = CellReferenceUtil.getColIndex("AA");
        assertEquals(26, colIndex);

        colIndex = CellReferenceUtil.getColIndex("AAA");
        assertEquals(26 * 26 + 26, colIndex);
    }

    /**
     * Test method for
     * {@link edu.xmu.excel.util.CellReferenceUtil#getColName(int)}
     */
    @Test
    public void getColNameTest()
    {
        String colName = CellReferenceUtil.getColName(0);
        assertEquals("A", colName);

        colName = CellReferenceUtil.getColName(26);
        assertEquals("AA", colName);

        colName = CellReferenceUtil.getColName(26 * 26 + 26);
        assertEquals("AAA", colName);
    }

    /**
     * Test method for
     * {@link edu.xmu.excel.util.CellReferenceUtil#getRowIndex(String)}
     */
    @Test
    public void getRowIndexTest()
    {
        int rowIndex = CellReferenceUtil.getRowIndex("8");
        assertEquals(7, rowIndex);

        rowIndex = CellReferenceUtil.getRowIndex("27");
        assertEquals(26, rowIndex);
    }

    /**
     * Test method for
     * {@link edu.xmu.excel.util.CellReferenceUtil#getRowName(int)}
     */
    @Test
    public void getRowNameTest()
    {
        String rowName = CellReferenceUtil.getRowName(7);
        assertEquals("8", rowName);

        rowName = CellReferenceUtil.getRowName(26);
        assertEquals("27", rowName);
    }

    /**
     * Test method for
     * {@link edu.xmu.excel.util.CellReferenceUtil#getColIndexByCoordName(String)}
     */
    @Test
    public void getColIndexByCoordNameTest()
    {
        int colIndex = CellReferenceUtil.getColIndexByCoordName("C8");
        assertEquals(2, colIndex);

        colIndex = CellReferenceUtil.getColIndexByCoordName("AA21");
        assertEquals(26, colIndex);

        colIndex = CellReferenceUtil.getColIndexByCoordName("AAA21");
        assertEquals(26 * 26 + 26, colIndex);
    }

    /**
     * Test method for
     * {@link edu.xmu.excel.util.CellReferenceUtil#getRowIndexByCoordName(String)}
     */
    @Test
    public void getRowIndexByCoordNameTest()
    {
        int rowIndex = CellReferenceUtil.getRowIndexByCoordName("C8");
        assertEquals(7, rowIndex);

        rowIndex = CellReferenceUtil.getRowIndexByCoordName("AA21");
        assertEquals(20, rowIndex);

        rowIndex = CellReferenceUtil.getRowIndexByCoordName("AA222");
        assertEquals(221, rowIndex);
    }
    /**
     * Test method for
     * {@link edu.xmu.excel.util.CellReferenceUtil#getCoordName(int, int)}
     */
    @Test
    public void getCoordNameTest()
    {
        String coordName = CellReferenceUtil.getCoordName(2, 7);
        assertEquals("C8", coordName);

        coordName = CellReferenceUtil.getCoordName(26, 21);
        assertEquals("AA22", coordName);

        coordName = CellReferenceUtil.getCoordName(26 * 26 + 26, 21);
        assertEquals("AAA22", coordName);
    }
}

 

 

分享到:
评论

相关推荐

    poi-5.1.0.jar中文文档.zip

    implementation group: 'org.apache.poi', name: 'poi', version: '***' Gradle (Short): implementation 'org.apache.poi:poi:***' Gradle (Kotlin): implementation("org.apache.poi:poi:***") ``` # 含有的 ...

    poi4.1.2以及所有依赖,源码,文档.zip

    org.apache.poi:poi:4.1.2 org.apache.poi:poi-ooxml:4.1.2 org.apache.poi:poi-ooxml-schemas:4.1.2 org.apache.xmlbeans:xmlbeans:3.1.0 com.github.virtuald:curvesapi:1.06 com.zaxxer:SparseBitSet:1.2 commons...

    poi-5.2.1.jar中文文档.zip

    implementation group: 'org.apache.poi', name: 'poi', version: '***' Gradle (Short): implementation 'org.apache.poi:poi:***' Gradle (Kotlin): implementation("org.apache.poi:poi:***") ``` # 含有的 ...

    poi-3.16-API文档-中文版.zip

    赠送jar包:poi-3.16.jar; 赠送原API文档:poi-3.16-javadoc.jar; 赠送源代码:poi-3.16-sources.jar; 赠送Maven依赖信息文件:poi-3.16.pom; 包含翻译后的API文档:poi-3.16-javadoc-API文档-中文(简体)版.zip...

    java poi官方文档

    Java POI 是一个开源项目,由Apache软件基金会维护,它为开发者提供了在Java环境中读取、写入和修改Microsoft Office格式文件的能力。这个强大的库主要关注Excel(XLS和XLSX)、Word(DOC和DOCX)以及PowerPoint...

    java poi所需的jar包

    Java POI 是一个开源项目,由Apache软件基金会维护,它提供了API用于读写Microsoft Office格式的文件,如Word(.doc)、Excel(.xls/.xlsx)、PowerPoint(.ppt/.pptx)以及Visio(.vsd)和Outlook(.msg)的数据。...

    java poi导出word

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,如Word、Excel和PowerPoint。在"java poi导出word"这个场景中,我们主要关注的是如何使用Java POI来创建和编辑Word文档...

    利用java poi操作ppt

    Java POI库是一个广泛使用的开源项目,主要用于读取、写入和修改Microsoft Office格式的文件,包括Excel、Word和PowerPoint。在这个特定的话题中,我们将深入探讨如何利用Java POI来操作PPT(PowerPoint)文件。以下...

    poi-3.17-API文档-中英对照版.zip

    标签:apache、poi、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    poi-ooxml-5.2.2.jar中文文档.zip

    implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '***' Gradle (Short): implementation 'org.apache.poi:poi-ooxml:***' Gradle (Kotlin): implementation("org.apache.poi:poi-ooxml:***...

    poi-5.2.0-API文档-中文版.zip

    标签:apache、poi、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    java poi jar包

    Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java中,如果你需要进行Excel的读写操作,POI库是必不可少的工具。这个"java poi jar包"包含了处理Excel文件所需...

    java利用POI技术上传&导出Excel表格并保存数据至数据库

    本篇文章将深入探讨如何利用POI技术在Java中实现Excel的上传、导出以及将数据保存至数据库。 首先,我们需要了解Apache POI的基本用法。POI提供了HSSF(用于.xls文件)和XSSF(用于.xlsx文件)API,它们允许我们...

    org.apache.poi-ooxml-schemas-3.9 jar包

    在Java开发中,Apache POI库是处理Excel文件的重要工具,尤其在需要进行大量数据导入导出或自动化报告生成的场景下。"org.apache.poi-ooxml-schemas-3.9.jar" 是这个项目中的一个组件,它包含了用于解析和生成Open ...

    neoHort iText&OpenPdf&JExcel&ApachePOI:neoHort:基于Java PDF&XLSX运行时生成器的iText&JExcelAPI&Apache POI-开源

    基于:iText 2.1.7,OpenPdf,JExcelAPI,POI库。 基于Xml的输入源,带有集成的WebJava环境对象。 包括动态标签的结构。 演示...

    org.apache.poi3.9 jar包

    "org.apache.poi3.9.jar"是这个项目的一个版本,适用于Java环境,它提供了对Office文档的读取、写入和修改功能。在Java编程中,如果你需要处理Excel数据,这个库是一个非常重要的工具。 该jar包中的主要类和接口...

    poi-ooxml-4.0.0.jar中文文档.zip

    implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '***' Gradle (Short): implementation 'org.apache.poi:poi-ooxml:***' Gradle (Kotlin): implementation("org.apache.poi:poi-ooxml:***...

    Java实现Excel读写的poi 5.2.1版本jar

    Java中的Apache POI库是一个强大的工具,用于读取和写入Microsoft Office格式的文件,特别是Excel的XLS和XLSX格式。在这个5.2.1版本中,POI提供了对Excel电子表格的强大支持,包括读取数据、修改内容、创建新工作簿...

Global site tag (gtag.js) - Google Analytics