2012-12-19 4 views
3

나는 closedXMl과 Excel도 사용하기가 정말 새롭습니다. 어리석은 질문을 하는군.기존 Excel 테이블에 새 행을 추가 할 때 차트가 업데이트되지 않습니다. (명명 된 범위를 사용하지 않아도 됨)

closedXML은 차트를 아직 지원하지 않기 때문에이 문제를 해결하기 위해 떠오르는 유일한 것은 excel table을 사용하여 차트를 만드는 것입니다. 그렇게하면 ClosedXML이 새로운 행을 삽입 할 때 범위를 업데이트 할 것이고 차트가 선택 될 것이라고 생각했습니다. 글쎄, 그렇지 않았다. 최소한 closedXML 라이브러리를 사용하여 코드의 행을 추가 할 때가 아닙니다.

궁금한 점은 Excel에서 자동으로 새 행을 추가하면 차트가 자동으로 업데이트되지만 코드에서 동일한 결과를 얻으려면 명명 된 범위와 함께 OFFSET 수식을 사용하고 차트 원본 데이터를 다음과 같이 설정해야합니다. 명명 된 범위. 당신이 코드는 매우 간단 볼 수 있듯이

Dim ruta As String = Server.MapPath("~/Templates/MyTemplate.xlsx") 
    Dim wb As New XLWorkbook(ruta) 
    Dim ws = wb.Worksheet(1) 

    Dim tblData = ws.Table("Table1") 

    Dim year As Integer = 2000 
    For i As Integer = 1 To 13 

     With tblData.DataRange.LastRow() 
      .Field("Year").SetValue(year) 
      .Field("Sales").SetValue(CInt(Math.Floor((2000 - 500 + 1) * Rnd())) + 500) 
     End With 
     tblData.DataRange.InsertRowsBelow(1) 
     year = year + 1 
    Next 

    tblData.LastRow.Delete() 

그래서 템플릿은 그 구성 : 나는 새 행을 삽입하는 데 사용하는 코드와 아무 잘못이 있다면 내가 알고 싶은 이유 때문이다 두 열 : "년" (표 1 [년]) 및 "판매" (표 1 [판매] 나는 이것이 내가 너희에게 말한대로, 추가 때문에 내 템플릿으로 아무 상관이 있다고 생각하지 않습니다

Excel에서 직접 새 행을 예상대로 작동하고 때 차트 계열에 추가 된 새 행을 포함하지 않는 코드에서 테이블을 생성 할 때 enter image description here

수동으로 새 범위를 추가 할 필요가 있다는 (Sheet1에! 표 [판매]Sheet1에! 표 [년]) 그것은 단지 첫 번째 행 (당신이를 삽입 할 때 기본적으로 추가 된 하나를 포함로 어떤 도움이 많이

PS를 감상 할 수있다 enter image description here

테이블) 다음은 엑셀 템플릿 (\ Templates \ MyTemplate.xlsx)뿐만 아니라 전체 코드가 포함 된 rar에 대한 link입니다.

+0

어떻게 든 테이블의 일부로 삽입을 인식하지 못합니다. – Pynner

+0

@Pynner 네 말이 맞아요! 그래서 ** Table1 [Sales] **를 'Sales'열에 대한 참조로 유지하는 것을 강요하는 방법이 있는지 알고 싶습니다. Excel 차트 시리즈의 값을 설정할 때 Excel이 ** Table1 [Sales] ** (판매 열)이라는 것을 인식하지만이 값을 확인하려고 할 때 놀랍게도 왜 그런지 이해하지 못합니다. , Excel은 ** $ B $ 2 **에 대해 원래 설정 한 값 (** Table1 [Sales] **)을 바꿉니다. 즉, 해당 열의 첫 번째 셀 – eddy

답변

1

테이블이 추가 행을 인식하지 못하는 경우 마지막 행 삭제 :

tblData.Resize tblData.Range(1, 1).CurrentRegion 

테이블의 크기를 조정해야합니다. 그러면 테이블 작업이 잘 수행되어야합니다.

+0

Resize 메서드가 종료되지 않습니다. ' 이 메서드는 무엇입니까? – Axel

+0

정말 ClosedXML 메서드입니까 (Resize 및 CurrentRegion)? 어떤 이유로 그들은 interop을 생각 나게했습니다 : S – Axel

+0

죄송합니다. 작동하지 않습니다 .PA는 공식 포럼에서 같은 질문을했지만 그는 얻지 못했습니다. 답변 : (https://closedxml.codeplex.com/discussions/409211) – Axel