Как сохранить книгу, не показывая диалоговое окно сохранения с Excel взаимодействия?
Мне нужно создать консольное приложение, которое экспортирует DataSet
в Excel. Проблема в том, что он не должен всплывать в окне сохранения, он должен автоматически создавать файл Excel. Пока у меня есть следующий код, но я не знаю, как сделать так, чтобы он автоматически сохранялся. Буду признателен за любую помощь.
public static void CreateWorkbook(DataSet ds, String path)
{
int rowindex = 0;
int columnindex = 0;
Microsoft.Office.Interop.Excel.Application wapp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Worksheet wsheet;
Microsoft.Office.Interop.Excel.Workbook wbook;
wapp.Visible = false;
wbook = wapp.Workbooks.Add(true);
wsheet = (Worksheet)wbook.ActiveSheet;
try
{
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
wsheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
}
foreach (DataRow row in ds.Tables[0].Rows)
{
rowindex++;
columnindex = 0;
foreach (DataColumn col in ds.Tables[0].Columns)
{
columnindex++;
wsheet.Cells[rowindex + 1, columnindex] = row[col.ColumnName];
}
}
}
catch (Exception ex)
{
String err = ex.Message;
}
wapp.UserControl = true;
}
Ответы
Ответ 1
Все аргументы WorkBook.SaveAs()
являются необязательными, но вы можете просто использовать Type.Missing
для большинства из них, если хотите.
Типичный вызов будет выглядеть так:
wbook.SaveAs("c:\\temp\\blah", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing,
false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wbook.Close();
Обратите внимание, что я не включил расширение файла; Excel установит это для вас.
Метод Workbook.SaveAs(Microsoft.Office.Tools.Excel) | Документы Microsoft описывает каждый из аргументов.
Ответ 2
Попробуйте вызвать метод SaveAs
книги. Для партии параметра попробуйте передать Type.Missing
ко всем параметрам, кроме первого (имя файла).
Ответ 3
Добавить ConflictResolution
в XlSaveConflictResolution.xlLocalSessionChanges
и установите для свойства приложения DisplayAlerts
значение false
чтобы окно не отображалось.
m_xlApp.DisplayAlerts = false;
// Quit Excel and clean up.
m_xlWorkbook.SaveAs(Filename: m_xlFilePath, FileFormat: excelFileExtension,
Password: false, ReadOnlyRecommended: XlSaveAsAccessMode.xlNoChange,
ConflictResolution: XlSaveConflictResolution.xlLocalSessionChanges);
m_xlWorkbook.Close();
см. Перечисление XlSaveConflictResolution (Microsoft.Office.Interop.Excel) | Документы Microsoft для получения дополнительной информации.
Ответ 4
См. Документацию MSDN
wbook.SaveAs(...);
Ответ 5
wapp.DisplayAlerts = false;
установка свойства Application.DisplayAlerts
в false
перестает отображать все предупреждения для всех своих книг.
Ответ 6
Используйте open xml sdk
для создания документов вместо автоматизации; он намного надежнее.
Ответ 7
Используйте свойство DisplayAlerts. Это очень просто и быстро.
private void SaveAs(Excel.Workbook WorkBook, string FileName)
{
m_Saving = true;
try
{
if (Global.CreatingCopy)
this.ExcelApp.DisplayAlerts = false;
WorkBook.SaveAs(FileName);
}
finally
{
m_Saving = false;
if (this.ExcelApp.DisplayAlerts == false)
this.ExcelApp.DisplayAlerts = true;
}
}
Никогда не позволяйте Excel определять тип файла, когда вы собираетесь сохранить файл. Потому что возможно, что формат будет изменен.
Если исходный документ был.xls, а текущий пользователь имеет офис 2013 по умолчанию, его формат.xlsx, а затем Excel преобразует файл в.xlsx, а пользователи, у которых нет Excel 2010 или выше, не могут открыть файл.