2015-01-12 33 views
0

그래서 IT 부서에서 Office 2007을 Office 2007로 업그레이드했습니다. 많은 노력을 다시해야합니다. (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 "

이것은 interop의 새 dll 버전 등으로 인해 발생하는 것으로 알고 있지만 유용한 내용을 찾지 않고 읽는 데 몇 시간을 소비했습니다. 1). 항목 (j-1). ToString() "

나는 몇 가지 해결 방법을 찾았고 결국 거의 효과를 볼 수있었습니다. 그러나 이전보다 훨씬 복잡해졌으며 여전히 범위와 정렬에 어려움을 겪고 있습니다.

사람이 할 수있는 간단한 코드를 공유 할 수있는 경우 : 정의 워크 시트

  • 에 워크 시트를 범위
  • 정렬을 데이터 테이블에서
  • 내보내기 값을 만들기 엑셀
    • 열기를 범위

    정말 감사 할 것입니다. 풀!

    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) 
    
  • 답변

    0

    워크 시트 클래스의 Cells 속성은 범위 클래스의 인스턴스를 반환합니다. 그래서 불가능한 범위 객체에 텍스트를 할당하려고합니다.

    일반적으로 이러한 문제를 피하기 위해 일련의 코드에서 여러 체인 점을 끊고 각 속성 또는 메서드를 별도의 코드 줄에서 선언하는 것이 좋습니다.

    How to automate Microsoft Excel from Visual BasicExcel Automation from Ron de Bruin 링크가 도움이 될 수 있습니다. 여기에 샘플 코드가 있습니다.

    +0

    설명과 코드 예제가 Office 2007에서 사용했던 것과 정확히 일치하므로 msdn 링크가 유용하지 않습니다. Office 2010 이후의 모든 기능이 변경된 것 같습니다. 그러나 이처럼 간단한 msdn 페이지를 찾을 수 없습니다. Office 2010/2013과 관련 있습니다. 매우 실망 스럽습니다. – damien

    +0

    이 버전들 사이에 어떤 변경 사항도 보이지 않습니다. 무슨 변화하고있어? –

    +0

    예를 들어 첫 번째 줄을 만들 수있는 유일한 방법은 oSheet.Name = "TEST"로 변경하는 것입니다. oWB.Worksheets (oSheet.Name) .Range ("A"& 1) = "이름" – damien