新しいExcelファイルを開かずに既存のExcelファイルに保存する

EnesÇevlikを受け取る

サンプルコードブ​​ロックがあります。以下を見ると、このコードが効果的に機能しています。しかし、このコードは私には十分ではありません。だから私は私のコードを改善する必要があります。まず、datagridviewとこのdatagridviewがデータブロックを作成していますが、行の前の下に新しい行を書き込むことができませんでした。新しいデータブロックをdatagridvewに追加すると、新しいデータはExcelファイルの古いデータの下に書き込む必要があります。

private void buttonExcel_Click(object sender, EventArgs e)
        {
            // creating Excel Application  
            Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
            // creating new WorkBook within Excel application  
            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
            // creating new Excelsheet in workbook  
            Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
            // see the excel sheet behind the program  
            app.Visible = true;
            // get the reference of first sheet. By default its name is Sheet1.  
            // store its reference to worksheet  
            worksheet = workbook.Sheets["Sheet1"];
            worksheet = workbook.ActiveSheet;
            // changing the name of active sheet  
            worksheet.Name = "Exported from gridview";
            // storing header part in Excel  
            for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
            {
                worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
            }
            // storing Each row and column value to excel sheet  
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                }
            }
            // save the application  

            workbook.SaveAs("c:\\PROJE TEKLİF FİYAT.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            // Exit from the application  
            app.Quit();
        }
ミカエル

これには、ClosedXMLライブラリ(NuGet経由)を使用しました。これにより、データテーブルの保存が非常に簡単になります。

まず、既存のスプレッドシートを次のようにデータテーブルとしてインポートします。

    public DataTable GetData(string filename)
    {
        using (XLWorkbook workBook = new XLWorkbook(filename))
        {
            //Read the first Sheet from Excel file.
            IXLWorksheet workSheet = workBook.Worksheet(1);

            //Create a new DataTable.
            DataTable dt = new DataTable();

            //Loop through the Worksheet rows.
            bool firstRow = true;
            foreach (IXLRow row in workSheet.Rows())
            {
                //Use the first row to add columns to DataTable.
                if (firstRow)
                {
                    foreach (IXLCell cell in row.Cells())
                    {
                        dt.Columns.Add(cell.Value.ToString());
                    }
                    firstRow = false;
                }
                else
                {
                    //Add rows to DataTable.
                    dt.Rows.Add();
                    int i = 0;

                    foreach (IXLCell cell in row.Cells(row.FirstCellUsed().Address.ColumnNumber, row.LastCellUsed().Address.ColumnNumber))
                    {
                        dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString();
                        i++;
                    }
                }
            }
            return dt;
        }
    }

次に、datagridviewをdatatableに変換し、既存のデータとdatagridviewデータを1つのデータテーブルにマージして、XLSXとして保存します。

using ClosedXML.Excel;
...
private void saveDGV(DataTable existing)
{
    //Creating DataTable.
    DataTable dt = new DataTable();
 
    //Adding the Columns.
    foreach (DataGridViewColumn column in dataGridView1.Columns)
    {
        dt.Columns.Add(column.HeaderText, column.ValueType);
    }
 
    //Adding the Rows.
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        dt.Rows.Add();
        foreach (DataGridViewCell cell in row.Cells)
        {
            dt.Rows[dt.Rows.Count - 1][cell.ColumnIndex] = cell.Value.ToString();
        }
    }
    existing.Merge(dt);
    using (XLWorkbook wb = new XLWorkbook())
    {
        wb.Worksheets.Add(existing, "Exported from gridview");
        //Adjust widths of Columns.
        wb.Worksheet(1).Columns().AdjustToContents();
        wb.SaveAs("c:\\PROJE TEKLİF FİYAT.xlsx")
    }
}

あなたはこのようにこれを使うでしょう:

using ClosedXML.Excel;
...
private void buttonExcel_Click(object sender, EventArgs e)
        {
            DataTable existing = GetData("c:\\PROJE TEKLİF FİYAT.xlsx");
            saveDGV(existing);
        }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パンダを使用して、既存のExcelファイルに新しいシートを保存する方法

分類Dev

出力を新しいExcelファイルに保存する

分類Dev

既存のファイルの上に新しいファイルを作成する

分類Dev

保存せずに開いているすべてのExcelファイルを閉じる

分類Dev

既存の行に影響を与えずに既存のCSVファイルに新しい行を追加する方法

分類Dev

既存のcsvファイルに新しい行を追加する

分類Dev

ファイルを開かずにExcelファイルを更新するにはどうすればよいですか(データの更新と数式の更新)。

分類Dev

既存の Excel ファイルを使用してデータを保存し、新しい名前で保存します

分類Dev

Pythonを使用して、新しい行を追加し、既存のExcelファイルに入力するにはどうすればよいですか?

分類Dev

Pythonでシート名としてcsvファイル名を使用して「a.csv」ファイルを既存のExcelファイル「b.xlsx」に新しいシートとして追加するにはどうすればよいですか?

分類Dev

既存のExcelファイルの新しい列にデータ(Pythonリスト)を追加するにはどうすればよいですか?

分類Dev

Pythonを使用して2つのExcelファイルを新しいExcelファイルに連結します

分類Dev

VBA:複数のExcelファイルが開いているときにExcelファイルを参照する

分類Dev

ファイルが存在するにもかかわらず、vimでファイルを開くと新しいファイルが作成されます

分類Dev

ExcelファイルのPrintPreviewを(表示せずに)image / pdfファイルとしてC#で保存します

分類Dev

pandas.DataFrameを既存のExcelファイルに追加する

分類Dev

既存のファイルに新しい属性を追加します

分類Dev

Excel.Writerファイルを新しいパスに保存する際の問題

分類Dev

OpenXML-保存せずにExcelファイルを作成して開く

分類Dev

最初にrsyncで既存のファイルを更新し、後で新しいファイルを作成しますか?

分類Dev

NSDictionaryをファイルに保存し、新しいファイルを作成する

分類Dev

Pythonを使用して既存のExcelファイルにデータを追加する

分類Dev

c#を使用して既存のExcelファイルにdatagridviewを追加する方法

分類Dev

新しいファイルを作成せずにファイルを開く

分類Dev

保存したファイルを開かずに、Excelvbaを介して.xlsxファイルを保存します

分類Dev

Outlookの特定のフォルダーにメッセージを保存する前に、Excelファイルの添付ファイルをVBAで開き、ファイル内を確認するにはどうすればよいですか?

分類Dev

batファイルを使用:Excelの既存の(すでに開いている)インスタンス内でExcelを開きます

分類Dev

既存のファイルを上書きせずに、ExcelvbaからWordファイルを保存しようとしています

分類Dev

新しいJSONObjectをjsonファイルの既存のJSONArrayに追加する方法

Related 関連記事

  1. 1

    パンダを使用して、既存のExcelファイルに新しいシートを保存する方法

  2. 2

    出力を新しいExcelファイルに保存する

  3. 3

    既存のファイルの上に新しいファイルを作成する

  4. 4

    保存せずに開いているすべてのExcelファイルを閉じる

  5. 5

    既存の行に影響を与えずに既存のCSVファイルに新しい行を追加する方法

  6. 6

    既存のcsvファイルに新しい行を追加する

  7. 7

    ファイルを開かずにExcelファイルを更新するにはどうすればよいですか(データの更新と数式の更新)。

  8. 8

    既存の Excel ファイルを使用してデータを保存し、新しい名前で保存します

  9. 9

    Pythonを使用して、新しい行を追加し、既存のExcelファイルに入力するにはどうすればよいですか?

  10. 10

    Pythonでシート名としてcsvファイル名を使用して「a.csv」ファイルを既存のExcelファイル「b.xlsx」に新しいシートとして追加するにはどうすればよいですか?

  11. 11

    既存のExcelファイルの新しい列にデータ(Pythonリスト)を追加するにはどうすればよいですか?

  12. 12

    Pythonを使用して2つのExcelファイルを新しいExcelファイルに連結します

  13. 13

    VBA:複数のExcelファイルが開いているときにExcelファイルを参照する

  14. 14

    ファイルが存在するにもかかわらず、vimでファイルを開くと新しいファイルが作成されます

  15. 15

    ExcelファイルのPrintPreviewを(表示せずに)image / pdfファイルとしてC#で保存します

  16. 16

    pandas.DataFrameを既存のExcelファイルに追加する

  17. 17

    既存のファイルに新しい属性を追加します

  18. 18

    Excel.Writerファイルを新しいパスに保存する際の問題

  19. 19

    OpenXML-保存せずにExcelファイルを作成して開く

  20. 20

    最初にrsyncで既存のファイルを更新し、後で新しいファイルを作成しますか?

  21. 21

    NSDictionaryをファイルに保存し、新しいファイルを作成する

  22. 22

    Pythonを使用して既存のExcelファイルにデータを追加する

  23. 23

    c#を使用して既存のExcelファイルにdatagridviewを追加する方法

  24. 24

    新しいファイルを作成せずにファイルを開く

  25. 25

    保存したファイルを開かずに、Excelvbaを介して.xlsxファイルを保存します

  26. 26

    Outlookの特定のフォルダーにメッセージを保存する前に、Excelファイルの添付ファイルをVBAで開き、ファイル内を確認するにはどうすればよいですか?

  27. 27

    batファイルを使用:Excelの既存の(すでに開いている)インスタンス内でExcelを開きます

  28. 28

    既存のファイルを上書きせずに、ExcelvbaからWordファイルを保存しようとしています

  29. 29

    新しいJSONObjectをjsonファイルの既存のJSONArrayに追加する方法

ホットタグ

アーカイブ