Как я могу сохранить форматирование рабочего листа при использовании Microsoft.Office.Interop.Excel.Workbook.SaveAs(...)?
Excel interop workbook.SaveAs() удаляет исходное форматирование?
Например, открыть ранее созданную книгу с Excel 2010, и я вижу, что это выглядит красиво: смелые шрифты в заголовках столбцов, красивые линии сетки, хорошие цвета подсветки, которая проявляет входные ячейки и т. д.
Я переключаюсь на VS2012 и используя ExcelAppManager, который я написал ниже, я начинаю с открытия книги, которая имеет красивое форматирование. Затем я использую библиотеку Interop для записи новых значений ячеек, программно, на один из рабочих листов. Затем я сохраняю рабочий лист с помощью SaveAs(), как показано ниже в ExcelAppManager. Затем я открываю рабочий лист с помощью Microsoft Excel 2010: я могу видеть значения, которые я написал в соответствующих ячейках - это здорово, это сработало - но вся рабочая книга больше не имеет форматирования. Это простое форматирование ванили, и весь красивый формат ушел.
Я определяю форматирование, как и все, что формат художник будет работать на: полужирный, шрифт, выравнивание линий сетки, углублений, ширины и высоты, и т.д.
Пример кода:
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
namespace ExcelStuff
{
public class ExcelAppManager
{
private Application _excelApp;
private bool _isDefaultWorksheets = true;
private Workbook _workBook;
private Workbooks _workBooks;
private Sheets _workSheets;
public ExcelAppManager(string pathToExistingWorksheet)
{
_excelApp = new Application {DisplayAlerts = false};
_workBooks = _excelApp.Workbooks;
_workBook = _workBooks.Open(pathToExistingWorksheet, Type.Missing, false, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
_workSheets = _workBook.Worksheets;
// NOTE: following lines are nice for debug of existing worksheets (to find the worksheets names)
//Get the reference of second worksheet
// var worksheet = (Microsoft.Office.Interop.Excel.ExcelWorksheet) _workSheets.Item[1];
// string strWorksheetName = worksheet.Name; //Get the name of worksheet.
_isDefaultWorksheets = true;
}
public ExcelAppManager()
{
}
public void Initialize()
{
_excelApp = new Application {DisplayAlerts = false};
_workBooks = _excelApp.Workbooks;
_workBook = _workBooks.Add(Missing.Value);
_workSheets = _workBook.Worksheets;
_isDefaultWorksheets = true;
}
public void KillProcess()
{
_workBook.Close();
_workBooks.Close();
_excelApp.Quit();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(_workSheets);
Marshal.FinalReleaseComObject(_workBook);
Marshal.FinalReleaseComObject(_workBooks);
Marshal.FinalReleaseComObject(_excelApp);
}
public void SaveAs(string filepath, string fileExtensionOfExcelFile)
{
_excelApp.DisplayAlerts = false;
if (fileExtensionOfExcelFile == "xlsm")
{
_workBook.SaveAs(filepath, XlFileFormat.xlOpenXMLWorkbookMacroEnabled,
Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange,
XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
}
else
{
_workBook.SaveAs(filepath, Type.Missing,
Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange,
XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
}
}
internal Sheets GetSheets()
{
return _workSheets;
}
}
И в моей клиентский код, я использую ExcelAppManager так:
var _manager = new ExcelAppManager(_excelFilepath);
Что именно вы подразумеваете под форматированием? что именно отсутствует в новой книге? – chancea
Пожалуйста, покажите код, так как SaveAs должен сохранять любое форматирование. –