Есть шаблон экселя .xlsx. Проблема не новая и много чего уже перечитал по ней, но решения не нашёл. И так. Открываю существующий файл, заношу в нужные ячейки данные, сохраняю под другим именем.
var stabilizerData = (StabilizerParsedData) data;
if (string.IsNullOrEmpty(TemplateFileName)) return;
var filePath = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\misc\{TemplateFileName}";
using (
var file =
new FileStream(filePath,
FileMode.Open, FileAccess.Read))
{
Book = new XSSFWorkbook(file);
}
Sheet = Book.GetSheetAt(0);
//Запись заголовка
FillHeader(stabilizerData);
//cellNum - Номер ячейки (в контексте таблицы - столбца), в которую вставляются данные, соответстует столбцу G в шаблоне
var cellNum = 6;
//SerialNumber
SetCellValue(14, cellNum, stabilizerData.SerialNumber);
//TOP
SetCellValue(17, cellNum, stabilizerData.ConnectionOne.TreadSize);
//BOT
SetCellValue(18, cellNum, stabilizerData.ConnectionTwo.TreadSize);
//L
SetCellValue(22, cellNum, stabilizerData.Length);
//L1
SetCellValue(23, cellNum, stabilizerData.FishingNeckTongSpace);
//OD
SetCellValue(29, cellNum, stabilizerData.ConnectionOne.Od);
//ID
SetCellValue(30, cellNum, stabilizerData.ConnectionTwo.Id);
//MaxOD
SetCellValue(31, cellNum, stabilizerData.StabilizerOd);
//BladeLength
SetCellValue(32, cellNum, stabilizerData.LobeLength);
//BladeWidth
SetCellValue(34, cellNum, stabilizerData.LobeWidth);
var fileName = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\out\{
stabilizerData.Name}_{stabilizerData.SerialNumber}_FinishedDiagram.xlsx";
//Сохранение изменённого файла
using (
var file =
new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
Book.Write(file);
}
В файле есть картинка (схема из автокада вроде бы и всякие стрелочки, указывающие размеры). Таких шаблона у меня 4, все делаю так, как в коде выше. С тремя проблем не возникает, с 4 же после сохранения начинается какая-то фигня, а именно, при открытии документа получаю ошибку "Ошибка в части содержимого в книге... " и так далее. Предложение исправить, если согласиться, то картинка просто удаляется и файл спокойно открывается. Из информации в интернете узнал, что картинка как-то связана с файлом drawings1.xml, что находится в архиве файла xlsx. Получается, что этот файл в новом документе меньше, чем в исходном. Понятное дело, что что при сохранении что-то не дописывается, но почему и что? И как это можно поправить? Использую C# и NPOI 2.3.0 и к нему идёт SharpZipLib 0.86.0... Уже установил, что если скопировать Drawings1.xml из старого документа в новый, проблема исчезает, но моя задача скопировать данные в этот шаблон и открыть его программно в excel, не хотелось бы париться с разархивированием, изменением и архивированием. Мой мозговой штурм продолжается, может и сам додумаюсь, но буду рад помощи или совету. Заранее спасибо.
Update: выяснилось, что проблема не столько в сломанном файле, сколько в том, что NPOI не дописывает часть информации в новый файл, который относится к рисункам, созданным в самом Excel, как например линии (в моём случае это был чертёж детали). Часть информации просто не дописалась в готовый файл.
Имеется некая играНеобходимо оптимально быстро найти кратчайшую последовательность ходов для достижения перехода из одного игрового состояния...
Собственно код который был на WinForm, нужно сделать что-то подобное на WPF
В ASPNET-приложении необходимо реализовать разворот картинок на 90 градусов
Имеется приложение с 2-мя Юзер контролами1 - со списком пользователей, 2 - с историей сообщений