Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 写在纸上会导致;“已取名称”;_C#_Excel_Winforms_Excel Interop - Fatal编程技术网

C# 写在纸上会导致;“已取名称”;

C# 写在纸上会导致;“已取名称”;,c#,excel,winforms,excel-interop,C#,Excel,Winforms,Excel Interop,我正在学习如何使用Interop.Excel。测试Winforms程序读取现有Excel文件,检查是否存在名为“Added_by_program”的选项卡,如果存在,则删除该工作表,并创建名为“Added_by_program”的新工作表。如果我不尝试写入新工作表,程序将一次又一次地完美运行。当我试图写信给它时,我会遇到问题。如果原始文件中不存在工作表,则程序只运行一次,并正确写入新创建的工作表。但在随后的跑步中,我得到: “System.Runtime.InteropServices.COME

我正在学习如何使用Interop.Excel。测试Winforms程序读取现有Excel文件,检查是否存在名为“Added_by_program”的选项卡,如果存在,则删除该工作表,并创建名为“Added_by_program”的新工作表。如果我不尝试写入新工作表,程序将一次又一次地完美运行。当我试图写信给它时,我会遇到问题。如果原始文件中不存在工作表,则程序只运行一次,并正确写入新创建的工作表。但在随后的跑步中,我得到:

“System.Runtime.InteropServices.COMException:'该名称已被使用。请尝试其他名称。”

用于尝试命名新图纸的行。我必须手动杀死打开的Excel实例。我错过了什么

代码(去掉不相关的行)


您是否设置了
xl.DisplayAlerts=false

否则,删除包含现有数据的工作表将显示确认对话框

如果Excel应用程序可见,
工作表.Delete
将被阻止,直到对话框被确认


如果Excel应用程序不可见,您的代码将继续执行(对话框被有效取消-->删除未确认),但工作表不会被删除。

您的代码从不将
foundRawSheet
设置为true,因此最后一个
If
块不应运行…TIm--。foundRawSheet确实得到了设置,但在代码的一个不相关部分,所以为了简洁起见,我在我的帖子中删除了它。对不起,这绝对是误导。
using System;
using System.IO;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
namespace excelReadWrite
{

public partial class Form1 : Form
{
    string readFolder = myPath;

    string inFileName = @"Aram test excel file.xlsx";
    string newSheetName = "Added_by_program";
    Range rawRange = null;
    Range pasteRange = null;
    int rawCols = 0;
    int rawRows = 0;
    int iInSheet = 0;
    int iNewSheet = 0;
    int nInSheets = 0;     
    bool foundRawSheet = false;
    bool foundNewSheet = false;
    Worksheet worksheet = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void start_Button_Click(object sender, EventArgs e)
    {
        string inFile = myPath+ inFileName;
        int nSheets = 0;
        string sheetNames = "";

        // Open Excel workbook to read
        Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application();

        Workbook workbook = xl.Workbooks.Open(inFile);

        // Count worksheets in opened Excel file
        nSheets = workbook.Worksheets.Count;
        nSheets_TextBox.Text = nSheets.ToString();

        nInSheets = 0;
        foreach (Worksheet worksheet in workbook.Worksheets)
            ++nInSheets;

            //foreach (Worksheet worksheet in workbook.Worksheets)
            for (int iSheet = nInSheets; iSheet >= 1; --iSheet)
        {
            worksheet = workbook.Worksheets[iSheet];
            sheetNames  += " " + worksheet.Name;

            // The program is going to add a worksheet. If it already exists, delete it before adding it.
            if (string.Equals(worksheet.Name, newSheetName))
            {
                workbook.Worksheets[iSheet].Delete();
            }
        }


        // Add a new sheet and name it
        if (foundRawSheet)
        {
         newWorksheet = workbook.Worksheets.Add();

         newWorksheet.Name = newSheetName;
// THE NEXT LINE IS THE PROBLEM LINE
// "Written" WILL BE WRITTEN TO A1:C3 WHEN THE SHEET IS CREATED, BUT THIS LINE
// CAUSES THE ERROR IN SUBSEQUENT RUNS 
// IF I COMMENT IT OUT, THE PROGRAM RUNS FINE, REPEATEDLY
         newWorksheet.Range["A1", "C3"].Value2 = "Written";

        workbook.Save();
        workbook.Close();
        xl.Quit();
    }


}
}