private Bytes GetFormatRecord(ushort id, string format) { Bytes bytes = new Bytes(); bytes.Append(BitConverter.GetBytes(id)); bytes.Append(XlsDocument.GetUnicodeString(format, 16)); return(Record.GetBytes(RID.FORMAT, bytes)); }
private Bytes LABEL() { Bytes label = new Bytes(); label.Append(LABELBase()); //Unicode string, 16-bit string length label.Append(XlsDocument.GetUnicodeString((string)Value ?? string.Empty, 16)); return(Record.GetBytes(RID.LABEL, label)); }
private void AddStrings(List <string> stringList, ref int remainingRecordBytes, ref Bytes bytes, Bytes sst, ref bool isFirstContinue) { foreach (string sharedString in stringList) { Bytes stringBytes = XlsDocument.GetUnicodeString(sharedString, 16); //per excelfileformat.pdf sec. 5.22, can't split a //Unicode string to another CONTINUE record before //the first character's byte/s are written, and must //repeat string option flags byte if it is split //OPTIM: For smaller filesize, handle the possibility of compressing continued portion of uncompressed strings (low ROI!) byte stringOptionFlag = 0xFF; bool charsAre16Bit = false; int minimumToAdd = int.MaxValue; if (stringBytes.Length > remainingRecordBytes) { stringOptionFlag = stringBytes.Get(2, 1).ByteArray[0]; charsAre16Bit = (stringOptionFlag & 0x01) == 0x01; minimumToAdd = charsAre16Bit ? 5 : 4; } while (stringBytes != null) { if (stringBytes.Length > remainingRecordBytes) //add what we can and continue { bool stringWasSplit = false; if (remainingRecordBytes > minimumToAdd) { int overLength = (stringBytes.Length - remainingRecordBytes); bytes.Append(stringBytes.Get(0, remainingRecordBytes)); stringBytes = stringBytes.Get(remainingRecordBytes, overLength); remainingRecordBytes -= remainingRecordBytes; stringWasSplit = true; } bytes = Continue(sst, bytes, out remainingRecordBytes, ref isFirstContinue); if (stringWasSplit) { bytes.Append(stringOptionFlag); remainingRecordBytes--; } } else //add what's left { bytes.Append(stringBytes); remainingRecordBytes -= stringBytes.Length; stringBytes = null; //exit loop to continue to next sharedString } } } }
private static Bytes BOUNDSHEET(Worksheet sheet, int basePosition) { Bytes bytes = new Bytes(); Bytes sheetName = XlsDocument.GetUnicodeString(sheet.Name, 8); bytes.Append(WorksheetVisibility.GetBytes(sheet.Visibility)); bytes.Append(WorksheetType.GetBytes(sheet.SheetType)); bytes.Append(sheetName); bytes.Prepend(BitConverter.GetBytes((int)basePosition)); //TODO: this should probably be unsigned 32 instead bytes.Prepend(BitConverter.GetBytes((ushort)bytes.Length)); bytes.Prepend(RID.BOUNDSHEET); return(bytes); }