var qtd = dataRow[3];
ничего не значит, потому что в возвращенных данных нет индекса [3]
, что приводит к ошибке.
Более простой путь для доступа к выбранным в этой строке:
$(document).on('click','.add_btn',function (){
var id = $(this).attr("id");
var dataRow = $('#example').DataTable().row( id ).data();
var price = dataRow[2];
var qtd_num = $(this).closest('tr').find('select').val()
...
})
Yikes, не делай того, что ты предлагаешь в своем комментарии. Скорее всего, у вас будет несколько экземпляров Excel (проверьте «Диспетчер задач» и посмотрите, сколько их осталось после выполнения кода).
Во-первых, добавьте ссылку на библиотеку объектов Excel («Проект» -> «Ссылки» и выберите объект Microsoft Excel). Библиотека). Теперь вы можете объявить ваши объекты как настоящие типы Excel и использовать раннее связывание, а не объявлять их как «Объект» и использовать позднее связывание. Это не является строго необходимым, но помимо всего прочего это означает, что вы получаете Intellisense при редактировании кода.
Вы делаете правильные вещи вплоть до .OleFormat.Edit. (Я бы лично использовал .OleFormat.Activate, но так как я никогда не пытался использовать .Edit, я не мог сказать, что это имеет значение).
Сделав. Активируйте (или, предположительно, .Edit), затем вы сможете получить доступ к члену OleFormat.Object. Поскольку внедренный объект представляет собой диаграмму Excel, «Объект» будет рабочей книгой Excel, поэтому вы можете сделать это:
Dim oOleFormat as OleFormat Set oOleFormat = ... oOleFormat.Activate Dim oWorkbook As Excel.Workbook Set oWorkbook = oOleFormat.Object ' Do stuff with the workbook oWorkbook.Charts(1).ChartArea.Font.Bold = True
Обратите внимание, что вам НЕ нужно закрывать Excel, и вы действительно не можете - Word «владеет» используемым экземпляром. для редактирования на месте, и будет решать, когда его закрыть. На самом деле это является проблемой, поскольку нет очевидного способа принудительно деактивировать встроенный объект, поэтому диаграмма останется открытой после выполнения кода, приведенного выше.
Существует хакерский способ получить График, чтобы закрыть, хотя. Если вы добавите команду Word, чтобы активировать ее как-то еще, она сначала будет деактивирована. Так что, если вы скажете ему активировать его как нечто бессмысленное, вы достигнете правильного результата, потому что Я деактивирую его, а затем не смогу снова его активировать. Итак, добавьте следующую строку:
oOleFormat.ActivateAs "This.Class.Does.Not.Exist"
Обратите внимание, что это вызовет ошибку, поэтому вам необходимо временно отключить обработку ошибок, используя On Error Resume Next. По этой причине я обычно создаю метод Deactivate, чтобы избежать нарушения обработки ошибок в моем основном методе. Как в:
Private Sub DeactivateOleObject(ByRef oOleFormat as OleFormat) On Error Resume Next oOleFormat.ActivateAs "This.Class.Does.Not.Exist" End Sub
Надеюсь, это поможет. Гэри
У меня есть решение моей собственной проблемы. Дальнейшие комментарии будут цениться -
Sub TestMacro()
Dim lNumShapes As Long
Dim lShapeCnt As Long
Dim xlApp As Object
Dim wrdActDoc As Document
Set wrdActDoc = ActiveDocument
For lShapeCnt = 1 To 1 'wrdActDoc.InlineShapes.Count
If wrdActDoc.InlineShapes(lShapeCnt).Type = wdInlineShapeEmbeddedOLEObject Then
If wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.ProgID = "Excel.Sheet.8" Then
wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.Edit
Set xlApp = GetObject(, "Excel.Application")
xlApp.Workbooks(1).Worksheets(1).Range("A1") = "This is A modified"
xlApp.Workbooks(1).Save
xlApp.Workbooks(1).Close
xlApp.Quit
End If
End If
Next lShapeCnt
End Sub