Kobojunkie
Kobojunkie

Reputation: 6545

Programmatically pad a row in Excel in OpenXML

I need to add some extra cells to an excel row via OpenXML. However, the code below does not seem to be doing the trick. Would appreciate any help to get this working please.

private Row PadRow(Row row, int p)
{
    try
    {
        int currentcount = p - row.Descendants<Cell>().Count<Cell>();
        for (int count = 0; count < currentcount; count++)
            row.Append(new Cell() { DataType = CellValues.String, CellValue = new CellValue(" ") });
    }
    catch (Exception ex)
    {
        throw ex;
    };
    return row;
}

Upvotes: 1

Views: 850

Answers (1)

Kobojunkie
Kobojunkie

Reputation: 6545

Found a great fix.

http://lateral8.com/articles/2010/3/5/openxml-sdk-20-export-a-datatable-to-excel.aspx

      /// <summary>
        /// Gets the Excel column name based on a supplied index number.
        /// </summary>
        /// <returns>1 = A, 2 = B... 27 = AA, etc.</returns>
        private string getColumnName(int columnIndex)
        {
            int dividend = columnIndex;
            string columnName = String.Empty;
            int modifier;

            while (dividend > 0)
            {
                modifier = (dividend - 1) % 26;
                columnName =
                    Convert.ToChar(65 + modifier).ToString() + columnName;
                dividend = (int)((dividend - modifier) / 26);
            }

            return columnName;
        }
        private Cell createTextCell(int columnIndex, int rowIndex,  object cellValue)
        {
            Cell cell = new Cell();

            cell.DataType = CellValues.InlineString;
            cell.CellReference = getColumnName(columnIndex) + rowIndex;

            InlineString inlineString = new InlineString();
            Text t = new Text();

            t.Text = cellValue.ToString();
            inlineString.AppendChild(t);
            cell.AppendChild(inlineString);

            return cell;
        }

        public void ProcessDCTRows(IEnumerable<Row> dataRows, SharedStringTable sharedString)
        {
            try
            {
                //Extract the information for each row 
                foreach (Row row in dataRows)
                {
                    IEnumerable<String> cellValues;
                    if (row.Descendants<Cell>().Count<Cell>() < 234)
                    {
                        int lastcolindex = row.Descendants<Cell>().Count<Cell>(); 
                        int rowindex = Convert.ToInt32(row.RowIndex.ToString());
                        int currentcount = 234 ;
                        for (; lastcolindex < currentcount; lastcolindex++)
                        {
                            row.AppendChild( createTextCell(lastcolindex,rowindex," " ));
                        }

                    }

.   . //add processing code here

}

Upvotes: 1

Related Questions