2012-09-13 308 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

啊,我试过。值,但我有范围错误,我从来没有再次尝试与正确的范围格式。谢谢。顶线工程。 – 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小技巧。首先写入所有细胞一次:

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

//这里填充值,然后在一个家禽一举将数据写入到Excel:

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

其次注意.WithComCleanup() - 做VSTO当你编码需要注意管理非托管内存 - http://jake.ginnivan.net/vsto-com-interop

+0

在循环大量电子表格时,复制如何执行?我试图远离剪贴板代码,因为我要通过一堆excel文件进​​行循环。 – user1667414

+0

@ user1667414请参阅我的编辑队友 –

+0

谢谢Jeremy,我会如何将这个小技巧整合到我现在的代码中?谢谢。托尼。 – user1667414

相关问题