reading Excel Open XML is ignoring blank cells

后端 未结 14 1866
忘了有多久
忘了有多久 2020-11-30 04:18

I am using the accepted solution here to convert an excel sheet into a datatable. This works fine if I have \"perfect\" data but if I have a blank cell in the middle of my

14条回答
  •  一生所求
    2020-11-30 04:55

    I can't resist optimizing the subroutines from Amurra's answer to remove need for Regex's.

    The first function isn't actually needed since the second one can will accept a cell reference (C3) or a column name (C) (but still a nice helper function). The indices are also one-based (only because our implementation used one-based for the rows to match visually with Excel).

        /// 
        /// Given a cell name, return the cell column name.
        /// 
        /// Address of the cell (ie. B2)
        /// Column Name (ie. B)
        /// cellReference
        public static string GetColumnName(string cellReference)
        {
            // Advance from L to R until a number, then return 0 through previous position
            //
            for (int lastCharPos = 0; lastCharPos <= 3; lastCharPos++)
                if (Char.IsNumber(cellReference[lastCharPos]))
                    return cellReference.Substring(0, lastCharPos);
    
            throw new ArgumentOutOfRangeException("cellReference");
        }
    
        /// 
        /// Return one-based column index given a cell name or column name
        /// 
        /// Column Name (ie. A, AB3, or AB44)
        /// One based index if the conversion was successful; otherwise null
        public static int GetColumnIndexFromName(string columnNameOrCellReference)
        {
            int columnIndex = 0;            
            int factor = 1;
            for (int pos = columnNameOrCellReference.Length - 1; pos >= 0; pos--)   // R to L
            {
                if (Char.IsLetter(columnNameOrCellReference[pos]))  // for letters (columnName)
                {
                    columnIndex += factor * ((columnNameOrCellReference[pos] - 'A') + 1);
                    factor *= 26;
                }
            }
            return columnIndex;
        }
    

提交回复
热议问题