Как сохранять Excel НЕ только для чтения? - C#

Узнай цену своей работы

Формулировка задачи:

Сохраняю данные из datagridview в ecxel следующим образом
Листинг программы
  1. Excel.Application excelapp = new Excel.Application();
  2. Excel.Workbook workbook = excelapp.Workbooks.Add();
  3. Excel.Worksheet worksheet = workbook.ActiveSheet;
  4. for (int i = 1; i < dataGridView1_2016.RowCount + 1; i++)
  5. {
  6. for (int j = 1; j < dataGridView1_2016.ColumnCount + 1; j++)
  7. {
  8. worksheet.Rows[i].Columns[j] = dataGridView1_2016.Rows[i - 1].Cells[j - 1].Value;
  9. }
  10. }
  11. excelapp.AlertBeforeOverwriting = false;
  12. workbook.SaveAs(System.Windows.Forms.Application.StartupPath + @"/temp.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault,
  13. false, false, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, false, false, true);
  14. excelapp.Quit();
Но при попытке открыть этот документ, мне пишет что он только для чтения:
Листинг программы
  1. string filename = @"/temp.xlsx";
  2. string ConnectionString = String.Format("Provider =Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=No";Data Source={0}", filename);
  3. DataSet ds = new DataSet("EXCEL");
  4. OleDbConnection cn = new OleDbConnection(ConnectionString);
  5. cn.Open(); //System.Data.OleDb.OleDbException: "Обновление невозможно. База данных или объект доступны только для чтения."
  6. DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
  7. string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];
  8. string select = String.Format("SELECT * FROM [{0}]", sheet1);
  9. OleDbDataAdapter ad = new OleDbDataAdapter(select, cn);
  10. ad.Fill(ds);
  11. dataGridView2.DataSource = ds;

Решение задачи: «Как сохранять Excel НЕ только для чтения?»

textual
Листинг программы
  1.             var workbook = new XLWorkbook();
  2.  
  3.             var worksheet = workbook.Worksheets.Add($"Отчет за {monthName[monthNum - 1]} {dtpEndPeriod.Value.Year}г");
  4.  
  5.             var saveFileDialog = new SaveFileDialog
  6.             {
  7.                 Filter = "Excel files|*.xlsx",
  8.                 Title = "Сохранить как...",
  9.                 FileName = $"Отчет ПРБ за {monthName[monthNum - 1]} {dtpEndPeriod.Value.Year}г"
  10.             };
  11.  
  12.             if (saveFileDialog.ShowDialog() == DialogResult.OK)
  13.             {
  14.                 if (!string.IsNullOrWhiteSpace(saveFileDialog.FileName))
  15.                     workbook.SaveAs(saveFileDialog.FileName);
  16.                 MessageBox.Show("Сохранение произведено успешно.", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
  17.             }
  18.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы