2014-02-17 1 views
0

다음 코드를 사용하여 하나의 Excel 시트를 다른 통합 문서로 복사합니다. 원본 Excel 시트에는 숨겨진 행의 계열 차트가 들어 있습니다. = 'C : 예를Excel 워크 시트 .Copy 메서드는 차트의 일부 링크를 외부로 복사합니다.

Worksheet w; //My source worksheet with chart 
w.Activate(); 
w.Name = CreateValidWorksheetName(targetSheetName); 
w.get_Range("a1").EntireRow.EntireColumn.Copy(); 
w.get_Range("a1").EntireRow.EntireColumn.PasteSpecial(XlPasteType.xlPasteValues); 
w.Range["A1:A1"].Select(); 

if (targetWorkbook != null) 
{           
    w.Copy(targetWorkbook.Sheets[1], Type.Missing); 
    targetWorkbook.RefreshAll(); 
} 

.... 
targetWorkbook.SaveAs(... 

지금 눈에 보이는 시리즈가 제대로 복사 (theese 시리즈는 다음과 같은 코드 앞에 C#에서 코드에 의해 숨겨져 있습니다)하지만, 외부 링크로 복사됩니다 일련의 숨겨진 \ X [sourceWorkbook.xlsx ] PDK 0-32 kv '! $ D $ 23 : $ D $ 100

이제 문제가되는 부분이 있습니다. "targetWorkbook"을 열면 숨겨진 시리즈를 포함한 추악한 차트가 보입니다. 그러나 Excel에서 직접 "sourceWorkbook"을 열면 차트가 자동으로 고정되고 숨겨진 시리즈가 사라집니다.

프로그래밍 방식으로 어떻게 구현합니까?

답변

0

저는 이제 Worksheet.Copy 메서드에서이 버그를 해결하기 위해 수 시간의 삶을 잃었습니다. 때때로 나는 나쁘지 학생이 왜 궁금해 내가

우선 내가 시도 ... 이제 더 유용한 일을 할 수있다 :

//Break links 
System.Array links = (System.Array) ((object)targetWorkbook.LinkSources(XlLink.xlExcelLinks)); 
if (links != null) 
{ 
    for (int i = 1; i <= links.Length; i++) 
    { 
     try 
     { 
      targetWorkbook.UpdateLink((string)links.GetValue(i), 
         XlLinkType.xlLinkTypeExcelLinks); 
      targetWorkbook.BreakLink((string)links.GetValue(i), 
         XlLinkType.xlLinkTypeExcelLinks); 
     } 
     catch (Exception ex) 
     { 
      Tools.LogException(ex, "targetWorkbook.BreakLink"); 
     } 
    } 
} 

없음 성공하고 난 HRESULT 오류가 발생했습니다. Excel의 비주얼 인터페이스를 사용해도 외부 링크를 삭제할 수 없었습니다. 아마도이 예외 만 삼켰을 것입니다. "

: 그렇지 않으면 당신이 얻을 수 있습니다, 소스의 파일 형식은 대상 통합 문서 일치 (모두 XLSX 있습니다) 통합 문서 확인하는 것도 중요하다

w.Activate(); 
w.Name = CreateValidWorksheetName(targetSheetName); 
w.get_Range("a1").EntireRow.EntireColumn.Copy(); 
w.get_Range("a1").EntireRow.EntireColumn.PasteSpecial(XlPasteType.xlPasteValues); 
w.Range["A1:A1"].Select(); 

if (targetWorkbook != null) 
{ 
    //Unhide all rows and then copy!!! 
    w.get_Range("a1").EntireRow.EntireColumn.Hidden = false; 
    w.get_Range("a1").EntireColumn.EntireRow.Hidden = false; 
    w.Copy(targetWorkbook.Sheets[1], Type.Missing); 
    //Then hide all rows again 
    HideRows(true, targetWorkbook.Sheets[1].UsedRange, "***HIDETHISROW***"); 
    HideRows(false, targetWorkbook.Sheets[1].UsedRange, "***HIDETHISCOL***"); 

:

마지막으로이 속임수를 썼는지 원본 통합 문서보다 적은 행과 열이 포함되어 있으므로 Excel에서 대상 통합 문서에 시트를 삽입 할 수 없습니다. 데이터를 대상 통합 문서로 이동하거나 복사하려면 데이터를 선택한 다음 복사 및 붙여 넣기 명령을 사용하여 삽입합니다 다른 통합 문서의 장에. "

_ExcelApp.DefaultSaveFormat = Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook;