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

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

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

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

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

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

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


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

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

9   голосов , оценка 4 из 5
Похожие ответы