Exemplo n.º 1
0
        public static void Encode(Workbook workbook, Stream stream)
        {
            List <Record> list         = WorkbookEncoder.EncodeWorkbook(workbook);
            BinaryWriter  binaryWriter = new BinaryWriter(stream);

            foreach (Record current in list)
            {
                current.Write(binaryWriter);
            }
            binaryWriter.Close();
        }
Exemplo n.º 2
0
        private static Record EncodeImages(IList <Image> images)
        {
            MSODRAWINGGROUP    mSODRAWINGGROUP    = new MSODRAWINGGROUP();
            MsofbtDggContainer msofbtDggContainer = new MsofbtDggContainer();

            mSODRAWINGGROUP.EscherRecords.Add(msofbtDggContainer);
            MsofbtDgg msofbtDgg = new MsofbtDgg();

            msofbtDgg.NumSavedDrawings = images.Count;
            checked
            {
                msofbtDgg.NumSavedShapes = images.Count + 1;
                msofbtDgg.MaxShapeID     = 1024 + msofbtDgg.NumSavedShapes;
                msofbtDgg.GroupIdClusters.Add(1, msofbtDgg.NumSavedShapes);
                msofbtDggContainer.EscherRecords.Add(msofbtDgg);
                MsofbtBstoreContainer msofbtBstoreContainer = new MsofbtBstoreContainer();
                msofbtBstoreContainer.Instance = (ushort)images.Count;
                foreach (Image current in images)
                {
                    MsofbtBSE msofbtBSE = new MsofbtBSE();
                    msofbtBSE.UID                  = Guid.NewGuid();
                    msofbtBSE.Ref                  = 1;
                    msofbtBSE.Version              = 2;
                    msofbtBSE.BlipRecord           = WorkbookEncoder.CreateBlipRecord(current);
                    msofbtBSE.BlipRecord.Type      = current.Format;
                    msofbtBSE.BlipRecord.ImageData = current.Data;
                    msofbtBSE.BlipRecord.UID       = msofbtBSE.UID;
                    msofbtBSE.BlipRecord.Marker    = 255;
                    msofbtBSE.SetBlipType(current.Format);
                    msofbtBstoreContainer.EscherRecords.Add(msofbtBSE);
                }
                msofbtDggContainer.EscherRecords.Add(msofbtBstoreContainer);
                MsofbtOPT msofbtOPT = new MsofbtOPT();
                msofbtOPT.Add(PropertyIDs.FitTextToShape, 524296u);
                msofbtOPT.Add(PropertyIDs.FillColor, 134217793u);
                msofbtOPT.Add(PropertyIDs.LineColor, 134217792u);
                msofbtDggContainer.EscherRecords.Add(msofbtOPT);
                MsofbtSplitMenuColors msofbtSplitMenuColors = new MsofbtSplitMenuColors();
                msofbtSplitMenuColors.Instance = 4;
                msofbtSplitMenuColors.Color1   = 134217741;
                msofbtSplitMenuColors.Color2   = 134217740;
                msofbtSplitMenuColors.Color3   = 134217751;
                msofbtSplitMenuColors.Color4   = 268435703;
                msofbtDggContainer.EscherRecords.Add(msofbtSplitMenuColors);
                return(mSODRAWINGGROUP);
            }
        }
Exemplo n.º 3
0
        private static List <Record> EncodeWorkbook(Workbook workbook)
        {
            SharedResource sharedResource = new SharedResource(true);
            List <Record>  list           = new List <Record>();

            list.Add(new BOF
            {
                BIFFversion          = 1536,
                StreamType           = 5,
                BuildID              = 3515,
                BuildYear            = 1996,
                RequiredExcelVersion = 6u
            });
            checked
            {
                list.Add(new CODEPAGE
                {
                    CodePageIdentifier = (ushort)Encoding.Unicode.CodePage
                });
                list.Add(new WINDOW1
                {
                    WindowWidth       = 16384,
                    WindowHeight      = 8192,
                    SelecteWorksheets = 1,
                    TabBarWidth       = 600,
                    OptionFlags       = 56
                });
                DATEMODE dATEMODE = new DATEMODE();
                dATEMODE.Mode           = 1;
                sharedResource.BaseDate = DateTime.Parse("1904-01-01");
                list.Add(dATEMODE);
                List <List <Record> > list2 = new List <List <Record> >();
                foreach (Worksheet current in workbook.Worksheets)
                {
                    List <Record> list3 = WorkSheetEncoder.Encode(current, sharedResource);
                    Record.EncodeRecords(list3);
                    list2.Add(list3);
                }
                list.AddRange(sharedResource.FormatRecords.ToArray());
                list.AddRange(sharedResource.ExtendedFormats.ToArray());
                List <BOUNDSHEET> list4 = new List <BOUNDSHEET>();
                foreach (Worksheet current in workbook.Worksheets)
                {
                    BOUNDSHEET bOUNDSHEET = new BOUNDSHEET();
                    bOUNDSHEET.Visibility     = 0;
                    bOUNDSHEET.SheetType      = 0;
                    bOUNDSHEET.SheetName      = current.Name;
                    bOUNDSHEET.StreamPosition = 0u;
                    list4.Add(bOUNDSHEET);
                    list.Add(bOUNDSHEET);
                }
                if (sharedResource.Images.Count > 0)
                {
                    list.Add(WorkbookEncoder.EncodeImages(sharedResource.Images));
                }
                Record.EncodeRecords(list);
                int sstOffset = Record.CountDataLength(list);
                list.Add(sharedResource.SharedStringTable);
                list.Add(WorkbookEncoder.CreateEXTSST(sharedResource.SharedStringTable, sstOffset));
                EOF item = new EOF();
                list.Add(item);
                Record.EncodeRecords(list);
                int num = Record.CountDataLength(list);
                for (int i = 0; i < workbook.Worksheets.Count; i++)
                {
                    list4[i].StreamPosition = (uint)num;
                    list4[i].Encode();
                    int num2 = Record.CountDataLength(list2[i]);
                    num += num2;
                }
                List <Record> list5 = new List <Record>();
                list5.AddRange(list);
                foreach (List <Record> list3 in list2)
                {
                    list5.AddRange(list3);
                }
                return(list5);
            }
        }