Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа c Excel из C# 
:(
    Опции темы
Clasteruga
Дата 17.7.2012, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



Добрый день уважаемые гуру программирования......скажи пожалуйста как можно программно открыть документ Excel из C# и просто пере сохранить его??
PM MAIL   Вверх
Fortnox
Дата 17.7.2012, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Зачем?
PM MAIL   Вверх
Clasteruga
Дата 17.7.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



есть проблема открытия сформированного документа(сервером отчетов) на мобильном устройстве, пере сохранение с помощью Excel помогает этого избежать 
PM MAIL   Вверх
Fortnox
Дата 17.7.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Можно использовать Open XML SDK. Сравнить документ до и после сохранения, что изменилось. Затем при помощи Open XML SDK внести изменения и сохранить.
В состав Open XML SDK входит тулза Productivity Tool. При помощи неё, можно открыть документы и посмотреть изменения (diff).

Пример:
Код

 byte[] byteArray = File.ReadAllBytes("IN.docx");
        using (MemoryStream mem = new MemoryStream())
        {
            // открываем
            mem.Write(byteArray, 0, (int)byteArray.Length);
            using (WordprocessingDocument wordDoc =
                WordprocessingDocument.Open(mem, true))
            {
               // изменяем документ
            }
            
            // сохраняем
            using (FileStream fileStream = new FileStream("OUT.docx",
                System.IO.FileMode.CreateNew))
            {
                mem.WriteTo(fileStream);
            }
        }


PM MAIL   Вверх
Clasteruga
Дата 17.7.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



а каки образом можно с помощью Open XML SDK скопировать лист из одной книги Excel и поместить данные в другую книгу Excel....перерыл кучу информации ничего не нашел подобного  smile 

Код

            byte[] byteArray = File.ReadAllBytes(@"C:\Input.xlsx");
            using (MemoryStream mem = new MemoryStream())
            {
                // открываем
                mem.Write(byteArray, 0, (int)byteArray.Length);
                using (SpreadsheetDocument wordDoc = SpreadsheetDocument.Open(mem, true))
                {
                    // изменяем документ
                }

                // сохраняем
                using (FileStream fileStream = new FileStream("OUT.xlsx",
                    System.IO.FileMode.CreateNew))
                {
                    mem.WriteTo(fileStream);
                }
            }


А можно перенести информацию из Iput.xlsx не создавая новый документ с помощью OPEN XML а открыть на изменение OUT.xlsx и поместить в него всю информацию из Iput.xlsx

Это сообщение отредактировал(а) Clasteruga - 17.7.2012, 11:16
PM MAIL   Вверх
Fortnox
Дата 17.7.2012, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Так с ходу не скажу. Не доводилось такое делать. 

Но нашел такое 

Можно еще погуглить по запросу - open xml sdk copy sheet
PM MAIL   Вверх
Clasteruga
Дата 17.7.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



Да этот пример рассматривал но тут идет работа в пределах одного документа, я в программировании не селен поэтому не могу сообразить как переместить в другую книгу.....вот и решил обратиться на форум

причем проблема осталась все та же,  после формирования OUT.xlsx на основе Iput.xlsx мобильное приложение оффиса либо не открывает вовсе документ либо открывает но там он пустой =(

но если этот OUT.xlsx открыть на ПК и просто пере сохранить, то на мобильном устройстве данный файл открывается без проблем 

Это сообщение отредактировал(а) Clasteruga - 17.7.2012, 11:31
PM MAIL   Вверх
Fortnox
Дата 17.7.2012, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Clasteruga, сравните документы до и после сохранения.
PM MAIL   Вверх
Bestoloch
Дата 18.7.2012, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



скажите при открытии документа на ПК для пересохранения, офис не выдает ни каких предупреждений ?
по опыту работы с *.xmlx файлами и OpenXml могу предположить что в структуре данных файла есть ошибки, которые, офис автоматом исправляет при пересохранении
PM MAIL   Вверх
Clasteruga
Дата 18.7.2012, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



нет никаких предупреждений не появляется......так есть способ программно открыть файлик Excel и пере сохранить его???
PM MAIL   Вверх
Bestoloch
Дата 18.7.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 29.6.2009

Репутация: нет
Всего: нет



можно его открыть и редактировать как угодно (можно делать все то же, что и через UI)
просто открыть и сохранить скорее всего ничего не изменит, нужно будет применить изменения, котррые, делает офис. как посмотреть изменения (они же различия) писали выше.
PM MAIL   Вверх
Clasteruga
Дата 19.7.2012, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



Может кто подскажет как поместить значение в ячейку не создавая новый лист? с помощью open xml 
PM MAIL   Вверх
Clasteruga
Дата 19.7.2012, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



Хочу записать несколько строк в книгу...но не знаю как.....вот пример одной записи в ячейку А1

Код

        public void MyTest(string FileName, string SheetName, string Text, uint rowIndex)
        {
            //Открываем файл
            SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(FileName, true);

            // Добавить WorkbookPart в документ
            WorkbookPart workbookpart = spreadsheetDocument.WorkbookPart;
            workbookpart.Workbook = new Workbook();

            // Add a WorksheetPart to the WorkbookPart.
            WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
            worksheetPart.Worksheet = new Worksheet(new SheetData());

            // Добавить лист в книгу.
            Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

            //Добавление нового листа и связать его с книгой.
            Sheet sheet = new Sheet()
            {
                Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
                SheetId = 1,
                Name = SheetName
            };
            sheets.Append(sheet);


            Worksheet worksheet = worksheetPart.Worksheet;
            SheetData sheetData = worksheet.GetFirstChild<SheetData>();

            //Строки
            Row row;
            row = new Row()
            {
                RowIndex = rowIndex
            };
            sheetData.Append(row);

            //Ячейки
            Cell cell = new Cell()
            {
                CellReference = "A1",
                DataType = CellValues.String,
                CellValue = new CellValue(Text)
            };
            row.Append(cell);

            //Сохранить изменения
            workbookpart.Workbook.Save();

            //Закрыть документ
            spreadsheetDocument.Close();
       } 
  

использование

Код

prog.MyTest(OutputFile, SheetName,"Mega",1);


Хотелось бы, открывать документ не создавая в нем нового листа, и вставить скажем в ячейки А1,А2,B1,B2 первого листа в документа
подскажите пожалуйста....

Это сообщение отредактировал(а) Clasteruga - 19.7.2012, 14:50
PM MAIL   Вверх
spbsmile
Дата 20.7.2012, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.7.2011

Репутация: нет
Всего: нет



привет!
 
  загуглите : ClosedXML.
 
для быстрого старта самое-то.

Добавлено через 9 минут и 8 секунд
Код

// use ClosedXML.dll
IXLWorksheet worksheet;
String sheetName = array[Month];
if (!workbook.Worksheets.TryGetWorksheet(sheetName, out worksheet))
 worksheet = workbook.AddWorksheet(sheetName);

   worksheet.Cell(1, 1).Value = "Имя";



там есть форум, на такой простой вопрос  Вам точно ответят.
PM MAIL   Вверх
Clasteruga
Дата 20.7.2012, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



Спасибо отличная dll гораздо проще чем OpenXML SDK, но проблема осталась таже сформированный документ на открылся на Android
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.