2016-10-05 3 views
-1

Запуск старого классического ASP-сайта, и до сих пор я создал свой собственный файл «Excel» с HTML, который отправляется в наш бухгалтерский отдел. Они пересмотрели файл Excel, который они хотят использовать, поэтому я не могу использовать свой старый метод. Поэтому я напрямую подключаюсь к файлу excel (ADODB), и я могу достаточно быстро обновить необходимые ячейки. Проблема в том, что они добавили некоторые поля в нижней части «формы», в том числе некоторые с формулами SUM(), и оставили 34 строки для записей в середине. Нам часто нужно больше, чем это.Заполнение pre-exisitng формы Excel с использованием vbscript

Я попытался «вставить в» sql и попытался «rs.AddNew», и эти оба помещают данные в строку ниже диапазона, на который я нацеливаюсь; справедливо. Однако NEW ROW не добавляется в файл - данные попадают в строку ниже. Это не похоже на ввод строки вручную в Excel и последующее нажатие нижних строк вниз. Кто-нибудь знает, как я могу это сделать через ADO/SQL? Или это просто невозможно?

В крайнем случае, мне просто нужно создать дополнительный документ, чтобы провести переполнение за 34 ввода.

Спасибо!

я, наконец, нашел то, что reflects my problem, но это VBA (я думаю):

Const xlDown = -4121 

Set objExcel = CreateObject(“Excel.Application”) 

objExcel.Visible = True 


Set objWorkbook = objExcel.Workbooks.Open(“C:\Scripts\Test.xls”) 

Set objWorksheet = objWorkbook.Worksheets(1) 


Set objRange = objExcel.Range(“A1”) 

objRange.End(xlDown).Activate 


intRow = objExcel.ActiveCell.Row 

intColumn = objExcel.ActiveCell.Column 

Set objRange = objWorksheet.Cells(intRow, intColumn).EntireRow 


For i = 1 to 10 

    objRange.Insert(xlShiftDown) 

Next 


For i = 1 to 10 

    objExcel.Cells(intRow, 1).Value = i 

    intRow = intRow + 1 

Next 


strFormula = “=SUM(A1:A” & intRow – 1 & “)” 

objExcel.Cells(intRow, 1).Formula = strFormula 

Любой способ сделать эту работу на сервере в VBscript ??? :-)

+0

ADODB не будет расширять свои ряды. Вы можете добавлять строки, но вам нужно потребовать от ** нового ** соединения (т. Е. Не только от существующего), чтобы иметь доступ к ним. См. Https://www.google.com.au/search?q=HOWTO:+Use+ADO+and+ADOX+with+Excel+Data+from+Visual+Basic+or+VBA –

+0

Мне не нужно будет requery в файле Excel. Я создаю одноразовый файл, который отправляется по электронной почте в наш бухгалтерский отдел, и они используют SAP для извлечения данных. Моя единственная проблема заключается в том, что, например, у нас есть 45 транзакций для добавления в файл Excel, «они» помещают только 34 строки для этих данных. Теперь, если бы я вручную редактировал файл, я мог бы добавить дополнительные строки по мере необходимости. Но мой скрипт делает это для 5 разных отделов, и я пытаюсь его автоматизировать. ;-) –

+0

Вы можете вставлять строки в конец, но для их доступа требуется новое подключение. –

ответ

0

Поскольку вы не можете сделать это с помощью ADO (вы просто закончите переписывание своих формул), вам нужно будет напрямую получить доступ к книге. Код, который вы нашли, близок, но то, что ниже, должно соответствовать вашим потребностям. Дайте мне знать, если вам понадобится дальнейшее объяснение?

Option Explicit 

Const xlDown = -4121 
Const xlUp = -4162 

Dim objExcel, objWorkbook, objRange, iLastRow, myRecordCount, numInserts, intLoop 

Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 

Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls") 
Set objWorksheet = objWorkbook.Worksheets(1) ' refers to first worksheet 

iLastRow = objWorksheet.Cells(objWorksheet.Rows.Count, 1).End(xlUp).Row 

Set objRange = objWorksheet.Cells(iLastRow, 1).EntireRow 

' myRecordCount will need to hold the number of records you have 
If myRecordCount > 34 Then 
    numInserts = myRecordCount - 34 ' get the number of rows to be inserted 
Else 
    numInserts = 0 
End If 

For intLoop = 1 to numInserts 
    ' for as many rows as we need, insert above the formula 
    objRange.Insert(xlShiftDown) 
Next 

' insert your data into the worksheet here 

objWorkbook.Save 
objWorkbook.Close 
objExcel.Quit 

' send the file out however you're sending it 
+0

Спасибо, Дэйв. Я попробую это - мне интересно о CreateObject («Excel.Application ")', так как код находится на веб-сервере, который запускается моей школьной доской, и я не удивлюсь, если Excel не будет установлен. –

Смежные вопросы