Как сохранять 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);
}
}