.NET 3.x Работа с документами Excel без Microsoft.Office.Interop.Excel - C#
Формулировка задачи:
всем добрый день
все дело в том что для своих программ я использую БД Excel
но! однако не все устанавливают на компьютере Office, да и не правильно от пользователей требовать что бы они устанавливали его.... . в общем отсюда же проблема с Microsoft.Office.Interop.Excel
мне нужно с проекта убрать(заменить) Microsoft.Office.Interop так что бы все не зависимо от того что у них установлен office или нет могли пользоваться программой!
может кто-то знает как можно обойтись без Microsoft.Office.Interop.. и спокойно работать с excel?
буду очень признателен!
Решение задачи: «.NET 3.x Работа с документами Excel без Microsoft.Office.Interop.Excel»
textual
Листинг программы
using System;
using System.IO;
using System.Linq;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
namespace OpenExcelTest
{
internal class Program
{
private static void Main()
{
const string source = "file.xlsx";
const string filename = "result.xlsx";
File.Copy(source, filename, true);
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filename, true))
{
WorkbookPart workbookPart = doc.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
Worksheet sheet = worksheetPart.Worksheet;
var cells = sheet.Descendants<Cell>().ToList();
var rows = sheet.Descendants<Row>().ToList();
Console.WriteLine(cells.LongCount());
Console.WriteLine(rows.LongCount());
foreach (Cell cell in cells)
{
if (cell.CellValue != null)
{
Console.WriteLine("Cell contents: {0}", cell.CellValue.Text);
}
}
Cell newCell = InsertCellInWorksheet("A", 5, worksheetPart);
newCell.CellValue = new CellValue("100500");
sheet.Save();
}
}
private static Cell InsertCellInWorksheet(string columnName, uint rowIndex, WorksheetPart worksheetPart)
{
Worksheet worksheet = worksheetPart.Worksheet;
var sheetData = worksheet.GetFirstChild<SheetData>();
string cellReference = columnName + rowIndex;
// If the worksheet does not contain a row with the specified row index, insert one.
Row row;
if (sheetData.Elements<Row>().Count(r => r.RowIndex == rowIndex) != 0)
{
row = sheetData.Elements<Row>().First(r => r.RowIndex == rowIndex);
}
else
{
row = new Row {RowIndex = rowIndex};
sheetData.Append(row);
}
// If there is not a cell with the specified column name, insert one.
if (row.Elements<Cell>().Any(c => c.CellReference.Value == columnName + rowIndex))
{
return row.Elements<Cell>().First(c => c.CellReference.Value == cellReference);
}
// Cells must be in sequential order according to CellReference. Determine where to insert the new cell.
Cell refCell =
row.Elements<Cell>()
.FirstOrDefault(
cell =>
String.Compare(cell.CellReference.Value, cellReference,
StringComparison.OrdinalIgnoreCase) > 0);
var newCell = new Cell {CellReference = cellReference};
row.InsertBefore(newCell, refCell);
worksheet.Save();
return newCell;
}
}
}