因此,我们的IT部门将所有人从Office 2007升级到Office 2013,并且我的许多努力工作必须重做。 (VS 2013 Express中,框架4.5).net&Excel - 从Office 2007到2013
我得到的错误是:
“无法投类型的COM对象 '系统.__ ComObject' 的接口类型 'Microsoft.Office.Interop.Excel.Range' 。此操作失败,因为具有IID'{00020846-0000-0000-C000-000000000046}'的接口的COM组件上的QueryInterface调用由于以下错误而失败:接口未注册(异常来自HRESULT:0x80040155“
我知道这是由互操作的新DLL版本等引起的,但我花了几个小时阅读它没有发现任何有用的东西。它崩溃了第一个“xlws.Cells(i,j)= dt.Rows(i - 1).Item(J-1)。 ToString()“
我找到了一些解决方法,最终设法让它几乎工作,但感觉比以前复杂得多,我仍然在为范围和排序而努力。
如果有人可以分享一个简单的代码允许:
- 打开Excel
- 创建工作表
- 出口从数据表中的值到工作表
- 定义范围
- 排序范围
我会非常感谢开心!
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)=“First Name” – damien