public void SaveSpreadsheet(Stream outputStream, Stream backgroundImage, ushort backgroundImageWidth, ushort backgroundImageHeight)
        {
            CompleteCurrentWorksheet();
            m_worksheet    = null;
            m_worksheetOut = null;
            Stream       stream       = m_createTempStream("Workbook");
            BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.Unicode);
            List <long>  list         = WriteGlobalStream(binaryWriter);
            bool         isFirstPage  = true;

            for (int i = 0; i < m_worksheets.Count; i++)
            {
                WorksheetInfo worksheetInfo = m_worksheets[i];
                worksheetInfo.ResolveCellReferences(m_bookmarks);
                worksheetInfo.Write(binaryWriter, isFirstPage, m_createTempStream, backgroundImage, backgroundImageWidth, backgroundImageHeight);
                isFirstPage = false;
            }
            for (int j = 0; j < list.Count; j++)
            {
                stream.Seek(list[j] + 4, SeekOrigin.Begin);
                binaryWriter.Write((uint)m_worksheets[j].BOFStartOffset);
            }
            m_worksheets = null;
            stream.Flush();
            stream.Seek(0L, SeekOrigin.Begin);
            StructuredStorage.CreateSingleStreamFile(stream, "Workbook", "00020820-0000-0000-c000-000000000046", outputStream, forceInMemory: false);
            stream.Close();
            stream = null;
            outputStream.Flush();
        }
 private void AdjustWorksheetName(string reportName, WorksheetInfo workSheet)
 {
     if (!string.IsNullOrEmpty(reportName))
     {
         if (reportName.Length <= 31)
         {
             workSheet.SheetName = reportName;
         }
         else
         {
             workSheet.SheetName = reportName.Substring(0, 31);
         }
     }
 }
 private void AddNewWorksheet()
 {
     m_worksheet            = new WorksheetInfo(m_createTempStream("Page" + m_worksheets.Count + 1), ExcelRenderRes.SheetName + (m_worksheets.Count + 1));
     m_worksheet.SheetIndex = m_worksheets.Count;
     m_worksheets.Add(m_worksheet);
     m_worksheetOut     = new BinaryWriter(m_worksheet.CellData, Encoding.Unicode);
     m_numRowsThisBlock = 0;
     m_rowHandler       = null;
     m_column           = -1;
     m_cellValue        = null;
     m_cellValueType    = TypeCode.String;
     m_checkForRotatedEastAsianChars = false;
     m_startOfBlock         = -1L;
     m_rowIndexStartOfBlock = 0;
     m_startOfFirstCellData = 0L;
     m_lastDataCheckPoint   = -1L;
     m_styleContainer.Reset();
 }