Добавьте динамическую итоговую строку внизу электронной таблицы Excel, сгенерированной VB.NET и SQL

У меня есть электронная таблица Excel, которую я создал динамически с помощью SQL и VB.NET. Количество столбцов (2) никогда не изменится, однако количество записей будет меняться в зависимости от того, какие данные указал пользователь. После того, как SQL запустился и заполнил электронную таблицу, мне нужно добавить запись внизу таблицы, которая отображает общее (целое значение) записей в столбце 2.

Что-то типа:

xlSheet.Range(нижняя запись, столбец1) = "Всего" xlSheet.Range(нижняя запись, столбец2) = сумма всех вышеуказанных записей в столбце 2

Я использую VS 2010 и Excel 2010.

Мои таблицы похожи на это:

*Group*     *Refered Cases*
4H BOSS                 0
4H BSG                  0
4H SALES AND MKTG       0
ACCOUNTS RECEIVABLE     0
ASSET MANAGEMENT        0
AUDIT                   0
BOSS                    0
CORPORATE BSG           0
CUSTOMER SUPPORT        0
NETWORK ENGINEERING     0
PRODUCTION ENGINEERING  0
PRODUCTION OPERATIONS   0
SECURITY                0
SNFAL PRODUCT TEAM      0
VOICE SERVICES          0
XEROX                   0

ОТВЕТ:

Хорошо, я смог использовать следующий код, чтобы динамически найти последнюю ячейку первого столбца и ввести «ИТОГО» в ячейку, а также отформатировать ее соответствующим образом.

Dim lTotalRows As Long, lTotalCols As Long
    lTotalRows = xlSheet.UsedRange.Rows.Count
    lTotalCols = xlSheet.UsedRange.Columns.Count

With xlSheet.Range("A" & (lTotalRows + 1).ToString) 'Dynamically finds the last cell of the first column, and sets it equal to "Total" and formats the cell
    .Value = "TOTAL"
    .Interior.ColorIndex = 41 'Cell Background Changed to Black
    .Columns("A:B").EntireColumn.AutoFit()
    With .Font
        .ColorIndex = 2 'Cell Font Changed to White
        .Bold = True
        .Underline = Excel.XlUnderlineStyle.xlUnderlineStyleSingle
    End With
End With

Я смог использовать следующий код, чтобы установить последнюю ячейку второго столбца равной сумме всех всех ячеек второго столбца.

Dim totals as Integer
For Each dr As DataRow In dt.Rows
    totals += dr.Item(1)
Next

xlSheet.Range("B" & (lTotalRows + 1).ToString).Value = totals

person Josh McKearin    schedule 01.06.2012    source источник


Ответы (1)


Если вы знаете общее количество строк, вы можете вставить приведенную ниже формулу в ячейку внизу столбца. Данные вашего примера показывают 16 строк, не включая верхнюю строку заголовка.

=SUM(INDIRECT(ADDRESS(ROW()-16,COLUMN())):INDIRECT(ADDRESS(ROW()-1,COLUMN())))
person dmarietta    schedule 01.06.2012
comment
Мне пришлось добиться этого динамически, потому что количество строк меняется в зависимости от того, что запрашивается на основе того, что пользователь выбирает в моей форме Windows. Проверьте оп, в нем есть ответ. Я не могу ответить на свой вопрос до 8 часов после того, как его спросили из-за моего представителя. - person Josh McKearin; 02.06.2012