2016-04-08 15 views
5

epplus excelパッケージを使用して、既存のxlsxファイルを更新(別のシートを追加してグラフを追加)したいです。しかし、私はラインepplus part already exists

var pieChart = worksheet.Drawings.AddChart("Chart1", OfficeOpenXml.Drawing.Chart.eChartType.Pie); 

エラー、次のエラーでしまった:タイプ 「のSystem.InvalidOperationException」の未処理の例外はEPPlus.dll追加 情報で発生しました:一部はすでに

ができ存在します誰も私を助ける?前もって感謝します。

using (ExcelPackage pck = new ExcelPackage()) 
      { 
     using (FileStream stream = new FileStream("Report.xlsx", FileMode.Open)) 
       { 
        pck.Load(stream); 

        ExcelWorksheet worksheet = pck.Workbook.Worksheets.Add("1"); 

        var data = new List<KeyValuePair<string, int>> 
    { 
     new KeyValuePair<string, int>("Group A", 44613), 
     new KeyValuePair<string, int>("Group B", 36432), 
     new KeyValuePair<string, int>("Group C", 6324), 
     new KeyValuePair<string, int>("Group A", 6745), 
     new KeyValuePair<string, int>("Group B", 23434), 
     new KeyValuePair<string, int>("Group C", 5123), 
     new KeyValuePair<string, int>("Group A", 34545), 
     new KeyValuePair<string, int>("Group B", 5472), 
     new KeyValuePair<string, int>("Group C", 45637), 
     new KeyValuePair<string, int>("Group A", 37840), 
     new KeyValuePair<string, int>("Group B", 20827), 
     new KeyValuePair<string, int>("Group C", 4548), 
    }; 

        //Fill the table 
        var startCell = worksheet.Cells[1, 1]; 
        startCell.Offset(0, 0).Value = "Group Name"; 
        startCell.Offset(0, 1).Value = "Value"; 

        for (var i = 0; i < data.Count(); i++) 
        { 
         startCell.Offset(i + 1, 0).Value = data[i].Key; 
         startCell.Offset(i + 1, 1).Value = data[i].Value; 
        } 

        //Add the chart to the sheet 
        var pieChart = worksheet.Drawings.AddChart("Chart1", OfficeOpenXml.Drawing.Chart.eChartType.Pie); 
        pieChart.SetPosition(data.Count + 1, 0, 0, 0); 
        pieChart.Title.Text = "Test Chart"; 
        pieChart.Title.Font.Bold = true; 
        pieChart.Title.Font.Size = 12; 



        pck.Save(); 
       } 
+1

「Chart X」または「Chart1」ですか?このワークブックの他のシートには、既に「Chart1」(または使用しているChart X)がありますか? – Spidey

+0

はい、それはChart1、コピー貼り間違いです。既に編集されています。 – Svartalfar

+0

xlsxの名前を.zip拡張子に変更し、7zipまたは他のツールで開きます。あなたは 'xl \ drawings'フォルダを見ますか?もしそうなら、xmlファイルを見て、すでにそこにリストされている "chart1"があるかどうかを確かめてください。 – Ernie

答えて

1

おそらくあなたはすでにあなたのExcelで同じ名前のチャートを作成しているので(100%に動作します)これを試してみてください、あなたのコード内のどこかに

0

ファイルを別の名前にグラフ1の名前を変更してください。

using (ExcelPackage packageNew = new ExcelPackage()) 
{ 
ExcelWorksheet worksheetNew = packageNew.Workbook.Worksheets.Add("Sheet1"); 
worksheet.Cells["A1"].Value = "what ever"; 
. 
. 
. 
Byte[] bin = package.GetAsByteArray(); 
       string file = newFile.FullName; ; 
       File.WriteAllBytes(file, bin); 

       //These lines will open it in Excel 
       ProcessStartInfo pi = new ProcessStartInfo(file); 
       Process.Start(pi); 
} 
+0

答えは質問には関係しません。問題は、ワークブックに既に存在するものと同じ名前を持つ表を追加することであり、スプレッドシートを保存することとは関係ありません。 – Pete