Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Open XML как заблокировать ячейки и вставить макрос / 8 сообщений из 8, страница 1 из 1
05.12.2013, 06:58
    #38489742
rumka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
Всем привет.
Стоит задача отдавать с сайта экселевские шаблоны,но прежде чем его дать скачать,необходимо заблокировать некоторый диапазон
ячеек еще и макрос туда запхать.Так вот и вопрос собственно:
как блокировать
как записать макрос
Чет гуглю,ничего вразумительного не могу найти.

VS 2010
Open xml sdk 2.5
...
Рейтинг: 0 / 0
05.12.2013, 14:47
    #38490375
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
Open XML SDK 2.5 Productivity Tool
...
Рейтинг: 0 / 0
06.12.2013, 07:35
    #38491216
rumka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
а тело макроса надо динамически создавать,а не пихать каждый раз готовый.Я смотрела через тулс,он туда его
в двоичном формате чтоль пихает.
...
Рейтинг: 0 / 0
06.12.2013, 09:47
    #38491313
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
rumkaа тело макроса надо динамически создавать,а не пихать каждый раз готовый.Я смотрела через тулс,он туда его
в двоичном формате чтоль пихает.
Ну правильно всё, там в base64 обернуто. Вот такой код:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
#region Binary Data
public string vbaProjectPart1Data = "0M8R4KGxGuEAAAAAAAAAAAAAAAAAA...";

private System.IO.Stream GetBinaryDataStream(string base64String)
{
    return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String));
}

#endregion



То есть тебе в GetBinaryDataStream нужно подгрузить свой текст макроса в MemoryStream.

Код: c#
1.
return new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes("текст макроса"));
...
Рейтинг: 0 / 0
06.12.2013, 10:02
    #38491340
rumka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
Спасибо за разъяснение.Тока я не пойму в какой объект пихать макрос.Чтоб понятнее было,кусочек кода,как вообще обращаюсь:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public  void InsertText(string docName)
        {
            // Open the document for editing.
            using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
            {
                WorkbookPart wbPart = spreadSheet.WorkbookPart;
                WorksheetPart wbSheet2 = GetWorksheetPart(wbPart, "DESC");
                SheetData sheetData = wbSheet2.Worksheet.GetFirstChild<SheetData>();
                UpdateCell(wbSheet2,"aaaaa",15,"A");
                int count_desc = sheetData.ChildElements.Count;
                int start_index = 4; 
                for (int i = start_index; i <= count_desc; i++)
                {
                    Cell cell = GetCell2(wbSheet2.Worksheet,
                                             "A", i.ToString());
                    string value_range = ReadExcelCell(cell,wbPart);
                   
                    if (cell.CellValue == new CellValue("END_TEMPLATE"))
                    {
                        break;
                    }

                }

                SharedStringTablePart shareStringPart = wbPart.SharedStringTablePart;
                foreach (SharedStringItem item in shareStringPart.SharedStringTable.Elements<SharedStringItem>())
                {
                    if (item.InnerText == "END_TEMPLATE")
                    {
                        break;
                    }
                    
                }
                wbSheet2.Worksheet.Save();             
            }
        }


Какой объект нужен?(ссори за тупые вопросы)))
...
Рейтинг: 0 / 0
06.12.2013, 10:12
    #38491362
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
rumkaКакой объект нужен?(ссори за тупые вопросы)))
VbaProjectPart нужен.

Код: c#
1.
2.
VbaProjectPart vbaProjectPart1 = workbookPart1.AddNewPart<VbaProjectPart>("rId6");
GenerateVbaProjectPart1Content(vbaProjectPart1);



Код: c#
1.
2.
3.
4.
5.
6.
private void GenerateVbaProjectPart1Content(VbaProjectPart vbaProjectPart1)
{
    System.IO.Stream data = GetBinaryDataStream(vbaProjectPart1Data);
    vbaProjectPart1.FeedData(data);
    data.Close();
}
...
Рейтинг: 0 / 0
06.12.2013, 10:15
    #38491365
rumka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
МСУ СПАСИБО!
...
Рейтинг: 0 / 0
07.12.2013, 21:35
    #38492934
rumka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open XML как заблокировать ячейки и вставить макрос
Я конечно извиняюсь,но при конвертировании моего простого текста в base64
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  string code2 = @"Private Sub btnSave_Click()\r\n
                            Call Save_Record\r\n
                            End Sub\r\n";
             
            string base64 = Base64Encode(code2);
        }
        public static string Base64Encode(string plainText)
        {
            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
            return System.Convert.ToBase64String(plainTextBytes);
        }


я получаю строку :UHJpdmF0ZSBTdWIgYnRuU2F2ZV9DbGljaygpXHJcbg0KQ2FsbCBTYXZlX1JlY29yZFxyXG4NCkVuZCBTdWJcclxu
а спомощью тулса этот же самый код конвертиться как :0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGA............
как то по другому конвертить надо?
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Open XML как заблокировать ячейки и вставить макрос / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]