簡體   English   中英

將excel工作簿中的第一行復制到新的Excel工作簿

[英]Copy first row in excel workbook to a new excel workbook

如何獲取excel工作簿中的第一行並使用.net c#將其保存到新的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);

試試這段代碼:

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

要么

xlWorksheetNew.get_Range("A1", "A1").EntireRow.Value = xlWorksheet.get_Range("A1", "A1").EntireRow.Value;
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)
    {
    }
}

編輯:

我打算進入低級別的東西,但不知道你的專業水平。 如果你想要好的表現,不要使用復制/粘貼。 在這里,我將向您展示一些技巧。 首先立即寫入所有單元格:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM