Supprimer une colonne avec NPOI, une librairie Excel pour .NET

Voici une classe qui permet de supprimer une colonne en précisant sa position dans une feuille Excel :

public static class SheetUtility
{
    public static void deleteColumn(ISheet sheet, int columnToDelete)
    {
        int maxColumn = 0;
        for (int r = 0; r < sheet.LastRowNum + 1; r++)
        {
            IRow row = sheet.GetRow(r);

            if (row == null)
                continue;

            int lastColumn = row.LastCellNum;
            if (lastColumn > maxColumn)
                maxColumn = lastColumn;

            if (lastColumn < columnToDelete)
                continue;

            for (int x = columnToDelete + 1; x < lastColumn + 1; x++)
            {
                ICell oldCell = row.GetCell(x - 1);
                if (oldCell != null)
                    row.RemoveCell(oldCell);

                ICell nextCell = row.GetCell(x);
                if (nextCell != null)
                {
                    ICell newCell = row.CreateCell(x - 1, nextCell.CellType);
                    cloneCell(newCell, nextCell);
                }
            }
        }

        for (int c = 0; c < maxColumn; c++)
        {
            sheet.SetColumnWidth(c, sheet.GetColumnWidth(c + 1));
        }
    }

    private static void cloneCell(ICell cNew, ICell cOld)
    {
        cNew.CellComment = cOld.CellComment;
        cNew.CellStyle = cOld.CellStyle;

        switch (cNew.CellType)
        {
            case CellType.Boolean:
            {
                cNew.SetCellValue(cOld.BooleanCellValue);
                break;
            }
            case CellType.Numeric:
            {
                cNew.SetCellValue(cOld.NumericCellValue);
                break;
            }
            case CellType.String:
            {
                cNew.SetCellValue(cOld.StringCellValue);
                break;
            }
            case CellType.Error:
            {
                cNew.SetCellValue(cOld.ErrorCellValue);
                break;
            }
            case CellType.Formula:
            {
                cNew.SetCellValue(cOld.CellFormula);
                break;
            }
        }
    }
}

Ce code est une convertion que j'ai effectué à partir du code JAVA produit par alan williamson (http://pastebin.com/ff806298)