поэтому наш ИТ-отдел обновил всех с Office 2007 до Office 2013, и многие из моих напряженных работ нужно переделать. (VS 2013 Express, рамки 4,5).net & Excel - от Office 2007 до 2013
Ошибка я получаю:
«Не удается привести COM-объект типа 'System .__ ComObject' к типу интерфейса 'Microsoft.Office.Interop.Excel.Range' Эта операция завершилась неудачно, потому что вызов QueryInterface на COM-компоненте для интерфейса с IID '{00020846-0000-0000-C000-000000000046} не удался из-за следующей ошибки: Интерфейс не зарегистрирован (Исключение из HRESULT: 0x80040155 "
Я понимаю, что это вызвано новой версией dll и т. Д., Но я часами и часами читал об этом, не найдя ничего полезного. Он разбивает первый «xlws.Cells (i, j) = dt.Rows (i - 1) .Item (J-1). ToString() "
Я нашел некоторые обходные пути и, наконец, сумел заставить его почти работать, но он чувствует себя намного сложнее, чем раньше. Я все еще борюсь с диапазонами и сортировкой.
Если кто-то может поделиться простой код, позволяющий:
- Открыть Excel
- Создать рабочий лист
- значения Экспорт из DataTable на лист
- Определите диапазон
- Рассортируйте диапазон
Я бы очень благодарен FUL!
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim misValue As Object = System.Reflection.Missing.Value
xlApp = CreateObject("Excel.application")
xlApp.Visible = False
xlApp.DisplayAlerts = False
xlWorkBook = xlApp.Workbooks.Add(misValue)
Dim myrange As Excel.Range
Dim xlws As Excel.Worksheet
xlws = xlwb.Worksheets.Add(After:=xlwb.Worksheets(xlwb.Worksheets.Count))
xlws.Name = “name”
For i = 1 To dt.Rows.Count
For j = 1 To dt.Columns.Count
xlws.Cells(i, j) = dt.Rows(i - 1).Item(j-1).ToString()
Next
Next
xlws.Columns.AutoFit()
myrange = xlws.UsedRange
myrange.Select()
myrange.Sort(Key1:=myrange.Range("M1"), Order1:=Excel.XlSortOrder.xlAscending, Orientation:=Excel.XlSortOrientation.xlSortColumns)
myrange = xlws.Cells(2, 1)
myrange.Select()
xlWorkBook.Worksheets("Sheet1").Delete()
xlWorkBook.Worksheets("Sheet2").Delete()
xlWorkBook.Worksheets("Sheet3").Delete()
xlWorkBook.Worksheets("name").select()
xlWorkBook.SaveAs(folder_str & Format(Now, "MMddyyyy").ToString & " - " & “name” & ".xlsx")
xlWorkBook.Close()
xlApp.Quit()
Marshal.ReleaseComObject(xlws)
Marshal.ReleaseComObject(xlWorkBook)
Marshal.ReleaseComObject(xlApp)
Ссылка msdn не полезна, потому что объяснение и пример кода - это именно то, что я использовал с Office 2007. Похоже, что после того, как Office 2010 все изменилось ... но я не могу найти простую страницу msdn, подобную этой связанные с Office 2010/2013. Очень разочаровывающе ... – damien
Я не вижу никаких изменений между этими версиями. О каких изменениях вы говорите? –
Например, единственный способ, с помощью которого я могу заставить первую строку работать, - изменить ее на oSheet.Name = "TEST" oWB.Worksheets (oSheet.Name) .Range ("A" & 1) = "Имя" – damien