My question is, is there any other way to use my program apart from registering Interop dll on target machine?
Usted está preguntando si hay alguna manera de utilizar su programa, que utiliza interoperabilidad de Excel, cuando Excel no está instalado en el equipo que ejecuta el programa. La respuesta corta es no. La respuesta más larga es sí, si está dispuesto a refactorizar su programa para no utilizar interoperabilidad.
Puede usar el OOXml SDK provisto por Microsoft si la versión de Excel a la que apunta es de 2007 en adelante. También puede usar una biblioteca de terceros como Aspose si está dispuesto a gastar un poco de dinero.
Puede encontrar un ejemplo del uso del OOXml SDK para insertar una hoja de cálculo en un archivo de Excel en msdn.
// Given a document name, inserts a new worksheet.
public static void InsertWorksheet(string docName)
{
// Open the document for editing.
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
{
// Add a blank WorksheetPart.
WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
newWorksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();
string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart);
// Get a unique ID for the new worksheet.
uint sheetId = 1;
if (sheets.Elements<Sheet>().Count() > 0)
{
sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
}
// Give the new worksheet a name.
string sheetName = "Sheet" + sheetId;
// Append the new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
sheets.Append(sheet);
}
}
Gracias por los detalles. Entiendo las razones para avanzar hacia OpenXML, pero lamentablemente tengo que quedarme en la interoperabilidad por otros motivos. Solo para resolver el problema, estoy instalando Excel (como requisito previo) para mi programa. – Mahender