開いているExcelファイルに保存すると、Excelファイルを開いてDataGridViewに表示し、DataGridViewのデータを上書きできますか?C#Excel Data既存のファイルを上書きできますか?
私は新しいファイルと新しいシートを作成して保存する方法を発見。
しかし、私が好きな方法は、新しいファイルと新しいシートを作成することではありません。
既存のExcelを上書きするにはどうすればよいですか?
英語はそれが良いではない、私の母国語ではありません。
私はすでに以下のコードで試してみました。
{
SaveFileDialog sfd2 = new SaveFileDialog();
sfd2.Title = "Save as Excel File";
sfd2.Filter = "Excel Files(2003)|*.xls|Excel Files(2007)|*.xlsx";
sfd2.FileName = "";
if (sfd2.ShowDialog() == DialogResult.OK)
{
try
{
// Excel프로그램을 실행
excelApp = new Excel.Application();
// 실행된 Excel프로그램에 통합문서를 추가
wb = excelApp.Workbooks.Add();
//텍스트 형식 지정범위
Excel._Worksheet workSheet = wb.Worksheets.get_Item(1) as Excel._Worksheet;
Excel.Range oRange;
oRange = workSheet.get_Range("A1:A300", "S1:S300");
oRange.Cells.NumberFormat = "@";
oRange.EntireRow.AutoFit();
oRange.EntireColumn.AutoFit();
oRange.WrapText = false;
//데이터 동시저장
Map_DataGridView_To_ExcelSheet(dataGridView1, "Sheet1");
excelApp.Worksheets.Add();
Map_DataGridView_To_ExcelSheet(dataGridView2, "Sheet2");
excelApp.Worksheets.Add();
Map_DataGridView_To_ExcelSheet(dataGridView3, "Sheet3");
//view4에 데이터가 있을때만 4번째 시트를 생성
if (dataGridView4.DataSource != null)
{
excelApp.Worksheets.Add();
Map_DataGridView_To_ExcelSheet(dataGridView4, "Sheet4");
}
//excelApp.Worksheets.Add();
//Map_DataGridView_To_ExcelSheet(dataGridView5, "Sheet5");
ws.Columns.AutoFit();
// 여기서 저장경로를 변경하면 됩니다.
wb.SaveAs(sfd2.FileName, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wb.Close(true);
excelApp.Quit();
MessageBox.Show("저장이 완료되었습니다.");
}
//메모리해제
finally
{
releaseObject(ws);
releaseObject(wb);
releaseObject(excelApp);
}
}
}
private void Map_DataGridView_To_ExcelSheet(DataGridView dataGridView, string sheetName)
{
// 지정된 문자열에 해당하는 Sheet를 가져옵니다.
ws = wb.Worksheets.get_Item(sheetName) as Excel.Worksheet;
if(dataGridView.DataSource != null)
{
for (int i = 0; i < dataGridView.ColumnCount; i++)
{
label5.Text = i.ToString();
for (int j = 0; j < dataGridView.RowCount; j++)
{
label6.Text = j.ToString();
// 워크시트 개체 ws의 Cells(Range 개체)와 DataGridView의 인덱스가 반대인것에 유의
// 또한, Cells는 인덱스가 1부터 시작
// ws.Cells[Row, Column] // dataGridView[Column, Row]
if (dataGridView[i, j].Value.ToString().Trim() != "")
{
ws.Cells[j + 1, i + 1] = dataGridView[i, j].Value.ToString();
}
}
}
実際には答えはありませんが、 – TaW
コメントが長すぎて、質問に答えるいくつかの要素が含まれています。コメントではなく、StackOverflowがコメントと回答をどのように見ているのかが白や黒で表示されます。 (すなわち、彼らの援助を意味する「初心者にもなる」というSOマントラを維持し、問題の指針を与え、彼らの質問が悪い/間違っている理由を伝え、それを下降/フラグ/削除しない最初の日の忘却) –