簡體   English   中英

使用 C# 實現 Excel 自動化

[英]Excel automation using C#

我有一個包含近 400 個 excel 文件的文件夾。 我需要將所有這些 excel 文件中的工作表復制到一個 excel 文件中。

到目前為止,我已經完成了使用互操作和反射命名空間的工作。

我使用 folderBrowserDialog 瀏覽到文件夾並選擇它,這使我能夠獲取文件夾中文件的文件名並遍歷它們,這是我得到的任何幫助,將不勝感激。

if (result == DialogResult.OK)
{
    string path = fbd1.SelectedPath; //get the path
    int pathLength = path.Length + 1;
    string[] files = Directory.GetFiles(fbd1.SelectedPath);// getting the names of files in that folder                                      

    foreach (string i in files)
    {
        MessageBox.Show("1 " + i);
        myExcel.Application excelApp = new myExcel.ApplicationClass();
        excelApp.Visible = false;
        MessageBox.Show("2 " + i);
        myExcel.Workbook excelWorkbook = excelApp.Workbooks.Add(excelApp.Workbooks._Open(i, 0, false, 5, "", "", false, myExcel.XlPlatform.xlWindows, "", true, false, 0, true));
        myExcel.Sheets excelSheets = excelWorkbook.Worksheets;
        MessageBox.Show("3 " + i);
        excelApp.Workbooks.Close();
        excelApp.Quit();
    }

    MessageBox.Show("Done!");
}

如何將復制的工作表附加到目標文件。 希望問題很清楚?

謝謝。

使用 Worksheet.Copy(Before, After) 並將 after 指定為您想要的任何主文件的最后一個工作表。 請注意,您可能需要在 mainApp 中創建一個新工作表,以便在之后輸入工作表,以免引發異常。

請嘗試以下操作:

            Excel.Application mainApp = new Excel.ApplicationClass();
            mainApp.Visible = false;
            Excel.Workbook mainWorkbook = excelApp.Workbooks.Add(null);
            Excel.Sheets mainWorkSheets = mainWorkbook.Worksheets;

            foreach (string i in files)
            {
                MessageBox.Show("1 " + i);
                Excel.Application exApp = new Excel.ApplicationClass();
                exApp.Visible = false;
                MessageBox.Show("2 " + i);
                Excel.Workbook exWorkbook = exApp.Workbooks.Open(i,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                MessageBox.Show("3 " + i);
                foreach(Excel.Worksheet sheet in exWorkbook.Worksheets)
                {
                    sheet.Copy(Type.Missing, mainWorkSheets[mainWorkSheets.Count -1]);
                }
            }

            mainApp.Save("NewExcel");

怎么樣: Merge(@"C:\\ExcelFolder", @"C:\\FinalDestination.xls"); 對我有用,直接脫離工作樣本 - 為你修剪。

希望您不需要任何調整,但如果需要,請執行 (0:

請看以下代碼:

private void Merge(string strSourceFolder, string strDestinationFile)
{
    try
    {
        //1. Validate folder,
        //2. Instantiate excel object
        //3. Loop through the files
        //4. Add sheets
        //5. Save and enjoy!

        object missing = System.Reflection.Missing.Value;
        Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
        ExcelApp.Visible = false;

        //Create destination object
        Microsoft.Office.Interop.Excel.Workbook objBookDest = ExcelApp.Workbooks.Add(missing);


        foreach (string filename in Directory.GetFiles(strSourceFolder))
        {
            if (File.Exists(filename))
            {
                //create an object
                Microsoft.Office.Interop.Excel.Workbook objBookSource = ExcelApp.Workbooks._Open
              (filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing
              , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);


                //Browse through all files.
                foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in objBookSource.Worksheets)
                {
                    sheet.Copy(Type.Missing, objBookDest.Worksheets[objBookSource.Worksheets.Count]);
                }

                objBookSource.Close(Type.Missing, Type.Missing, Type.Missing);
                objBookSource = null; 

            }
        }
        objBookDest.SaveAs(strDestinationFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        objBookDest.Close(Type.Missing, Type.Missing, Type.Missing);

        objBookDest = null;
        ExcelApp = null;


    }
    catch (System.Exception e)
    {
        //Catch
    }
}

您可以使用 C# 嘗試使用 ZetExcel 進行 Excel 自動化。 ZetExcel for .NET 包含用於 .NET Framework、.NET Core 和 Xamarin 平台的 API。

暫無
暫無

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

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