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); } }
private static List <Record> EncodeWorkbook(Workbook workbook) { SharedResource sharedResource = new SharedResource(true); List <Record> book_records = new List <Record>(); BOF bof = new BOF(); bof.BIFFversion = 0x0600; //0600H = BIFF8 bof.StreamType = StreamType.WorkbookGlobals; bof.BuildID = 3515; bof.BuildYear = 1996; bof.RequiredExcelVersion = 6; book_records.Add(bof); CODEPAGE codepage = new CODEPAGE(); codepage.CodePageIdentifier = (ushort)Encoding.Unicode.CodePage; book_records.Add(codepage); WINDOW1 window = new WINDOW1(); window.WindowWidth = 16384; window.WindowHeight = 8192; window.SelecteWorksheets = 1; window.TabBarWidth = 600; window.OptionFlags = 56; book_records.Add(window); DATEMODE dateMode = new DATEMODE(); dateMode.Mode = (Int16)workbook.DateMode; if (workbook.DateMode == WorkbookDateMode.Windows) { sharedResource.BaseDate = Constants.WindowsBaseDate; } if (workbook.DateMode == WorkbookDateMode.Macintosh) { sharedResource.BaseDate = Constants.MacintoshBaseDate; } book_records.Add(dateMode); List <List <Record> > all_sheet_records = new List <List <Record> >(); foreach (Worksheet worksheet in workbook.Worksheets) { List <Record> sheet_records = WorkSheetEncoder.Encode(worksheet, sharedResource); Record.EncodeRecords(sheet_records); all_sheet_records.Add(sheet_records); } book_records.AddRange(sharedResource.FormatRecords.ToArray()); book_records.AddRange(sharedResource.ExtendedFormats.ToArray()); List <BOUNDSHEET> boundSheets = new List <BOUNDSHEET>(); foreach (Worksheet worksheet in workbook.Worksheets) { BOUNDSHEET boundSheet = new BOUNDSHEET(); boundSheet.Visibility = 0; // 00H = Visible boundSheet.SheetType = (byte)SheetType.Worksheet; boundSheet.SheetName = worksheet.Name; boundSheet.StreamPosition = 0; boundSheets.Add(boundSheet); book_records.Add(boundSheet); } if (sharedResource.Images.Count > 0) { book_records.Add(EncodeImages(sharedResource.Images)); } Record.EncodeRecords(book_records); int sstOffset = Record.CountDataLength(book_records); book_records.Add(sharedResource.SharedStringTable); book_records.Add(CreateEXTSST(sharedResource.SharedStringTable, sstOffset)); EOF eof = new EOF(); book_records.Add(eof); Record.EncodeRecords(book_records); int dataLength = Record.CountDataLength(book_records); for (int i = 0; i < workbook.Worksheets.Count; i++) { boundSheets[i].StreamPosition = (uint)dataLength; boundSheets[i].Encode(); int sheet_length = Record.CountDataLength(all_sheet_records[i]); dataLength += sheet_length; } List <Record> all_records = new List <Record>(); all_records.AddRange(book_records); foreach (List <Record> sheet_records in all_sheet_records) { all_records.AddRange(sheet_records); } return(all_records); }