Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从excel复制特定的工作表名称并将其保存到新位置?使用C_C#_Excel - Fatal编程技术网

C# 如何从excel复制特定的工作表名称并将其保存到新位置?使用C

C# 如何从excel复制特定的工作表名称并将其保存到新位置?使用C,c#,excel,C#,Excel,我正在使用C Windows窗体 目标: 如果我有多张excel表格 例如,表1、表2、表3、测试表1、测试表2 如何获取特定的工作表名称,例如[Sheet2],并将其保存为新的excel工作簿 这就是我到目前为止所做的: 按钮点击: 更新: 这就是我要去的地方 private void button1_Click(object sender, EventArgs e) { Excel.Application excelApp; string fileTarget = "C:\

我正在使用C Windows窗体

目标:

如果我有多张excel表格

例如,表1、表2、表3、测试表1、测试表2

如何获取特定的工作表名称,例如[Sheet2],并将其保存为新的excel工作簿

这就是我到目前为止所做的:

按钮点击:

更新:

这就是我要去的地方

private void button1_Click(object sender, EventArgs e)
{
    Excel.Application excelApp;

    string fileTarget = "C:\\Users\\LV98\\Desktop\\Test C#\\template.xlsx";
    string fileTemplate = "C:\\Users\\LV98\\Desktop\\Test C#\\excel_file.xlsx";
    excelApp = new Excel.Application();
    Excel.Workbook wbTarget;
    Excel.Worksheet sh;

    //Create target workbook
    wbTarget = excelApp.Workbooks.Open(fileTemplate);

    //Fill target workbook
    //Open the template sheet
    sh = wbTarget.Worksheets["Sheet2"];
    sh.Copy(wbTarget.Worksheets[1]);


    //Save file
    wbTarget.SaveAs(fileTarget);
    wbTarget.Close(true);
    excelApp.Quit();

}

当我打开新的excel文件时,它会打开Sheet2,这正是我想要的!但唯一的问题是,还保存了其他工作表。。我将考虑重新命名新工作表,并删除其余部分。

经过一番研究,我发现了一些有用的链接。 我在下面粘贴了一段代码片段,我认为这会对您有所帮助:

IWorkbook sourceWorkbook = application.Workbooks.Open("Source.xlsx");
IWorkbook destinationWorkbook = application.Workbooks.Open("Destination.xlsx");

//Copy Excel worksheet from source workbook to the destination workbook
destinationWorkbook.Worksheets.AddCopy(sourceWorkbook.Worksheets[0]);

//Save the file
destinationWorkbook.Save();
我在以下链接中找到了上述代码:


此外,我相信阅读以下答案会对您有所帮助:

只要在您的代码中尝试一下,它就会起作用

foreach (Excel.Worksheet sheet in wbTarget.Worksheets)
            {
                //Save Particular sheet as file
                if (sheet.Name == "Sheet2")
                {
                    var newbook = excelApp.Workbooks.Add(1);
                    sheet.Copy(newbook.Sheets[1]);

                    newbook.SaveAs(@"C:\Users\LV98\Desktop\Test C#\" + sheet.Name);
                    newbook.Close();
                }
            }
完成按钮单击事件的代码。我测试了下面的代码,它运行良好

protected void button1_Click(object sender, EventArgs e)
    {
        Excel.Application excelApp;

        string fileTemplate = "C:\\Users\\LV98\\Desktop\\Test C#\\template.xlsx";            
        excelApp = new Excel.Application();
        Excel.Workbook wbTarget;

        //Create target workbook
        wbTarget = excelApp.Workbooks.Open(fileTemplate);

        foreach (Excel.Worksheet sheet in wbTarget.Worksheets)
        {
            //Save Particular sheet as file
            if (sheet.Name == "Sheet2")
            {
                var newbook = excelApp.Workbooks.Add(1);
                sheet.Copy(newbook.Sheets[1]);

                newbook.SaveAs(@"C:\Users\LV98\Desktop\Test C#\" + sheet.Name);
                newbook.Close();
            }
        }
        wbTarget.Close(true);
        excelApp.AskToUpdateLinks = false;
        excelApp.Quit();
        GetExcelProcess(excelApp);
    }
    [DllImport("user32.dll")]
    static extern int GetWindowThreadProcessId(int hWnd, out int lpdwProcessId);
    Process GetExcelProcess(Excel.Application excelApp)
    {
        int id;
        GetWindowThreadProcessId(excelApp.Hwnd, out id);
        return Process.GetProcessById(id);
    }

您想保存所有工作表还是只保存特定工作表?@UdhayTitus specialworksheet@LV98对不起,我不明白,你能准确地解释一下问题吗?这行代码字符串fileTemplate=C:\\Users\\LV98\\Desktop\\Test C\\template.xlsx;-是获取图纸名称并将其保存到新位置newbook的源文件。SaveAs@C:\Users\LV98\Desktop\Test C\+sheet.Name;-关闭应用程序后,原始文件template.xlsx将被锁定以进行编辑。转到任务管理器并选择“流程”选项卡,在“流程”选项卡中检查是否有任何流程以EXCEL.exe的名称运行。这是我当前所做的-但需要防止代码中出现这种情况。我会做一些调查你试过这个吗
protected void button1_Click(object sender, EventArgs e)
    {
        Excel.Application excelApp;

        string fileTemplate = "C:\\Users\\LV98\\Desktop\\Test C#\\template.xlsx";            
        excelApp = new Excel.Application();
        Excel.Workbook wbTarget;

        //Create target workbook
        wbTarget = excelApp.Workbooks.Open(fileTemplate);

        foreach (Excel.Worksheet sheet in wbTarget.Worksheets)
        {
            //Save Particular sheet as file
            if (sheet.Name == "Sheet2")
            {
                var newbook = excelApp.Workbooks.Add(1);
                sheet.Copy(newbook.Sheets[1]);

                newbook.SaveAs(@"C:\Users\LV98\Desktop\Test C#\" + sheet.Name);
                newbook.Close();
            }
        }
        wbTarget.Close(true);
        excelApp.AskToUpdateLinks = false;
        excelApp.Quit();
        GetExcelProcess(excelApp);
    }
    [DllImport("user32.dll")]
    static extern int GetWindowThreadProcessId(int hWnd, out int lpdwProcessId);
    Process GetExcelProcess(Excel.Application excelApp)
    {
        int id;
        GetWindowThreadProcessId(excelApp.Hwnd, out id);
        return Process.GetProcessById(id);
    }