0

データを Excel テンプレートにエクスポートしようとしています。ワークブックに複数のタブがあります。エクスポートしたいワークシートのタブは「実現可能性」と呼ばれます。質問: この特定のワークシート名にエクスポートするにはどうすればよいですか?

using Excel = Microsoft.Office.Interop.Excel;

//excel output variables
    private string excelFileName = SqlDB.GetFolderTemplates() + SqlDB.GetFileEngOrd();
    private static Excel.Application xlsApp;
    private static Excel.Workbooks workbooks;
    private static Excel.Workbook workbook;
    private Excel.Worksheet worksheet;

private void btnFeasibility_Click(object sender, EventArgs e)
    {
        xlsApp = new Excel.ApplicationClass();
        if (xlsApp == null)
        {
            MessageBox.Show(Constants.EXCEL_INSTALL);
            return;
        }

        try
        {

            xlsApp.Visible = true;
            workbooks = xlsApp.Workbooks;
            workbook = xlsApp.Workbooks.Open(excelFileName);
//PROBLEM IS HERE -- HOW CAN I GO TO THE WORKSHEET NAMED "FEASIBILITY"
            worksheet = (Excel.Worksheet)workbook.Sheets[1];
            worksheet.Select();

            worksheet.Cells[3, 4] = newEngOrd.CustName;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            //release excel
            System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
            worksheet = null;
            System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
            workbook = null;
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp);
            xlsApp = null;

            GC.GetTotalMemory(false);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.GetTotalMemory(true);

            MessageBox.Show("Export  Complete");
        }

    }
4

2 に答える 2

0

すべてのシートを調べて、名前が一致するかどうかを確認します。

int foundNr=-1;
InteropExcel.Sheets sheets = workbook.Sheets;
InteropExcel.Sheet tempSheet = null;
for (int sheetIndex = 1; sheetIndex <= sheets.Count; sheetIndex++)
{
  tempSheet = (InteropExcel.Worksheet)sheets[sheetIndex];
  if (tempSheet.Name == "Feasibility")
  {
    foundNr = sheetIndex;
    Marshal.FinalReleaseComObject(tempSheet);
    tempSheet = null;        
    break
  }

  Marshal.FinalReleaseComObject(tempSheet);
  tempSheet = null;
}

if (foundNr != -1)
{
  sheet = (InteropExcel.Worksheet)sheets[foundNr];
}

私がリリースする方法は、COM 変数に null を割り当てることです。次に、finally ステートメントで null でない場合は、FinalReleaseComObject を呼び出します。そうすれば、メソッドに例外があっても解放されます。

Excelプロセスが閉じない

InteropExcel.Sheets sheets = null
try
{
  sheets = ....;
}
finally
{
  if (sheets != null)
  {
    Marshal.FinalReleaseComObject(sheets);
    sheets = null;
  }
}
于 2013-10-23T15:05:58.787 に答える
0

Nameプロパティを試しましたか?このワークシートのドキュメントを確認してください: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheet_members.aspx

于 2013-10-23T15:15:59.143 に答える