2012-09-13 7 views
4

Excel 통합 문서의 첫 번째 행을 얻는 방법 & .net C#을 사용하여 새로운 Excel 통합 문서에 저장합니까? 나는 열의 양을 알지 못하므로 전체 행을 가져와야합니다. 내가 가지고 있지만 새 통합 문서는 (더 행이 복사되지 않습니다)Excel 통합 문서의 첫 번째 행을 새로운 Excel 통합 문서로 복사

Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(file);  
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];  
Excel.Range xlRangeHeader = xlWorksheet.get_Range("A1", "A1").EntireRow;       
Excel.Workbook xlWorkbookNew = xlApp.Workbooks.Add();  
Excel._Worksheet xlWorksheetNew = xlWorkbookNew.Sheets[1];  
xlWorksheetNew.get_Range("A1", "A1").EntireRow.Value = xlRangeHeader;       
xlWorkbook.Close(false);       
xlWorkbookNew.SaveAs(Path.Combine(sDestination, Path.GetFileName(file)), fileFormat);       
xlWorkbookNew.Close(true); 

답변

2

것은이 코드를 시도 공백이 무엇 :

xlWorksheetNew.get_Range("A1", "A1").EntireRow.Value = xlRangeHeader.Value;   

또는

xlWorksheetNew.get_Range("A1", "A1").EntireRow.Value = xlWorksheet.get_Range("A1", "A1").EntireRow.Value; 
+1

아, 나는 .value를 시도했지만 범위가 잘못되었으므로 올바른 범위 형식으로 다시 시도하지 않았습니다. 감사. 탑 라인이 작동합니다. – user1667414

2
public void test(Application xlApp) 
{ 
    string file = @"C:\Temp\a.xlsx"; 
    Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(file); 
    Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
    xlWorksheet.Range["A1"].EntireRow.Copy(); 
    Excel.Workbook xlWorkbookNew = xlApp.Workbooks.Add(); 
    Excel._Worksheet xlWorksheetNew = xlWorkbookNew.Sheets[1]; 
    Worksheet activeSheet = xlWorkbookNew.ActiveSheet; 
    activeSheet.Paste(); 

    xlWorkbook.Close(false); 
    xlWorkbookNew.SaveAs(Path.Combine(@"C:\Temp", Path.GetFileName(file))); 
    xlWorkbookNew.Close(true); 
    CloseExcel(); 
} 

public void CloseExcel(Application xlApp) 
{ 
    try 
    { 
     if (xlApp != null) 
     { 
      xlApp.Quit(); 
      if (Marshal.IsComObject(xlApp)) 
       Marshal.ReleaseComObject(xlApp); 
     } 
    } 
    catch (Exception ex) 
    { 
    } 
} 

편집 :

I 낮은 수준의 물건에 들어갈 것이지만 당신의 전문 지식 수준을 알지 못했습니다. 좋은 성능을 원하면 복사/붙여 넣기를 사용하지 마십시오. 여기에 몇 가지 perf 트릭을 보여 드리겠습니다. 첫째로 한 번에 모든 셀에 쓰기 :

using (var targetRange = xlApp.Range[topLeft + startRow + ":" + rightBottom + endRow].WithComCleanup()) 
{ 
    targetRange.Resource.Value2 = values; 
} 

둘째 .WithComCleanup() 알 - VSTO를 수행 할 때 코딩 :

object[,] values = (object[,])Array.CreateInstance(typeof(object), new int[2] { rowCount, ColumnCount }, new int[2] { 1, 1 }); 

// 여기에 값을 채우기 다음 한 닭 급습에서 Excel로 데이터를 기록 관리되지 않는 메모리 관리에 대해 알고 있어야합니다 (http://jake.ginnivan.net/vsto-com-interop).

+0

많은 양의 스프레드 시트를 반복 할 때 복사가 어떻게 수행됩니까? 나는 Excel 파일의 힙을 통해 루프를 돌면서 클립 보드 코드를 지키려고 노력했다. – user1667414

+0

@ user1667414 내 편집 동료 참조 –

+0

감사합니다. Jeremy, 내가 지금 가지고있는 코드에 그 perf 트릭을 어떻게 통합 할 수 있습니까? 감사. 토니. – user1667414

관련 문제