【问题标题】:Write on two different worksheets dosen't work excel 2007写在两个不同的工作表上不起作用excel 2007
【发布时间】:2017-05-05 12:28:42
【问题描述】:

我有一个问题,我需要在excel上写一些信息。

我可以在两个工作表之一(“worksheet”)上正确书写,而在另一个工作表(“worksheet2”)上,它什么也没写,我不知道为什么。所有的过程都是一样的,但它不写任何东西。

我把我的代码放在下面,希望对你有帮助:

var excelApp = new Microsoft.Office.Interop.Excel.Application();
        excelApp.Workbooks.Open(destFile);
        Microsoft.Office.Interop.Excel.Worksheet worksheet = excelApp.Worksheets.get_Item(2);
        Microsoft.Office.Interop.Excel.Worksheet worksheet2 = excelApp.Worksheets.get_Item(1);
        excelApp.Visible = false;

        var data = new object[numRows, numColumns];
        int contadorMedidas = 0;
        //int primeraVez = 0;
        for (int i = 1; i <= numRows; i++)  // assuming the data starts at 1,1
        {
            for (int j = 1; j <= numColumns; j++)
            {
                if (contadorMedidas < contents.Count)
                {
                    worksheet.Cells[i, j] = contents[contadorMedidas];
                    contadorMedidas++;
                }
            }
        }

        //Escribir en la hoja de pautas el nombre y los valores de codigo y plano
        //Codigo
        worksheet2.Cells[2, 5] = codigo;
        //Plano
        worksheet2.Cells[3, 4] = plano;
        //Trabajador
        worksheet2.Cells[6, 2] = cbxWorker.Text;
        //Si es BR, hay que añadir un código extra:
        if (br)
        {
            for (int i = 0; i < numRows; i++)
            {
                worksheet2.Cells[8 + i, 6] = "7525SI-0203-FA"; 
            }
        }

        excelApp.Quit();

【问题讨论】:

  • 这样打开后你的excel是什么样子的,它有适当数量的工作表吗?也许您首先需要添加工作表?
  • 我制作了一份 Excel 副本,其中包含这两页和另一页。一个叫“Pauta”,另一个叫“Medidas”,最后一个叫“Filtros”。

标签: c# excel excel-2007 worksheet


【解决方案1】:

我注意到你的代码当它要写到工作表2时,你有一个条件。也许这个条件是假的,这就是它没有写入工作表2的原因。

if (br)
{
    //write to worksheet2
}

否则,我使用以下代码并能够在同一个 Excel 工作簿中的两个工作表上进行书写。 希望这会有所帮助。

//I created a class called ExcelFunctions which has the 
//methods OpenExcelFile and AccessSpecificExcelSheet
var excelFunction = new ExcelFunctions();    

//Open the Excel file
excelWorkbook = excelFunction.OpenExcelFile(excelApp, excelFilePath);

//Get the sheets
Sheets excelSheets = excelWorkbook.Worksheets;

//Access the first sheet
string sheetName = "Sheet1";
Worksheet activeWorksheet = excelFunction.AccessSpecificExcelSheet(excelSheets, sheetName);
                activeWorksheet.Cells[2, 1] = "Write to sheet1";

//Access the second sheet
string sheetName2 = "Sheet2";
activeWorksheet = excelFunction.AccessSpecificExcelSheet(excelSheets, sheetName2);
activeWorksheet.Cells[4, 1] = "Write to sheet2";

这就是我的“AccessSpecificationExcelSheet”方法的样子:

public Worksheet AccessSpecificExcelSheet(Sheets allExcelSheets, string sheetName)
{
    Worksheet selectedWorksheet = allExcelSheets.get_Item(sheetName);
    selectedWorksheet.Select();

    //Select cell A1 when opening
    Range topExcel = selectedWorksheet.get_Range("A1", Type.Missing);
    topExcel.Select();

    return selectedWorksheet;
}

这就是我的“OpenExcelFile”方法的样子:

public Workbook OpenExcelFile(Application excelApp, string excelFilePath)
{
    Workbook excelWorkbook = excelApp.Workbooks.Open(excelFilePath);
    return excelWorkbook;
}

【讨论】:

  • 我无法使用 OpenExcelFile,为什么?
  • 我可以通过“Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(destFile);”得到它但它不起作用,它给出了错误:“Excepción de HRESULT: 0x8002000B (DISP_E_BADINDEX))”
  • @Imrik,对不起,OpenExcelFile 方法是我定义的一种方法。我已经编辑了上面的内容以显示我的 OpenExcelFile 方法的作用。
  • @Imrik 对于您遇到的错误,首先检查您正在打开的文件是否存在并且当前未打开。然后检查您尝试访问的工作表是否存在于您打开的工作簿中,因为错误“DISP_E_BADINDEX”似乎是关于尝试访问例如不存在的数组中的索引。
  • 是的,我知道错误的含义,但我不知道为什么会出现这个问题。在打开第二张纸之前,我尝试使用 exit() 和 close() 函数,但我又遇到了同样的错误。工作表和文档存在,并且在访问之前关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多