Exemplo n.º 1
0
		public XlsWorksheet(int index, XlsBiffBoundSheet refSheet)
		{
			m_Index = index;
			m_Name = refSheet.SheetName;
			m_dataOffset = refSheet.StartOffset;

		    switch (refSheet.VisibleState)
		    {
		        case XlsBiffBoundSheet.SheetVisibility.Hidden:
		            m_VisibleState = "hidden";
		            break;
                case XlsBiffBoundSheet.SheetVisibility.VeryHidden:
		            m_VisibleState = "veryhidden";
		            break;
                default:
		            m_VisibleState = "visible";
		            break;
		    }
		}
        public XlsWorksheet(int index, XlsBiffBoundSheet refSheet)
        {
            m_Index      = index;
            m_Name       = refSheet.SheetName;
            m_dataOffset = refSheet.StartOffset;

            switch (refSheet.VisibleState)
            {
            case XlsBiffBoundSheet.SheetVisibility.Hidden:
                m_VisibleState = "hidden";
                break;

            case XlsBiffBoundSheet.SheetVisibility.VeryHidden:
                m_VisibleState = "veryhidden";
                break;

            default:
                m_VisibleState = "visible";
                break;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Private method, reads Workbook Globals section
        /// </summary>
        private void ReadWorkbookGlobals()
        {
            m_globals = new XlsWorkbookGlobals();
            m_stream.Seek(0, SeekOrigin.Begin);
            XlsBiffRecord rec = m_stream.Read();
            XlsBiffBOF    bof = rec as XlsBiffBOF;

            if (bof == null || bof.Type != BIFFTYPE.WorkbookGlobals)
            {
                throw new InvalidDataException("Oops! Stream has invalid data");
            }
            m_version  = bof.Version;
            m_encoding = Encoding.Unicode;
            bool isV8 = (m_version >= 0x600);
            bool sst  = false;

            while ((rec = m_stream.Read()) != null)
            {
                try
                {
                    switch (rec.ID)
                    {
                    case BIFFRECORDTYPE.INTERFACEHDR:
                        m_globals.InterfaceHdr = (XlsBiffInterfaceHdr)rec;
                        break;

                    case BIFFRECORDTYPE.BOUNDSHEET:
                        XlsBiffBoundSheet sheet = (XlsBiffBoundSheet)rec;
                        if (sheet.Type != XlsBiffBoundSheet.SheetType.Worksheet)
                        {
                            break;
                        }
                        sheet.IsV8        = isV8;
                        sheet.UseEncoding = m_encoding;
                        m_sheets.Add(new XlsWorksheet(m_globals.Sheets.Count, sheet));
                        m_globals.Sheets.Add(sheet);
                        break;

                    case BIFFRECORDTYPE.MMS:
                        m_globals.MMS = rec;
                        break;

                    case BIFFRECORDTYPE.COUNTRY:
                        m_globals.Country = rec;
                        break;

                    case BIFFRECORDTYPE.CODEPAGE:
                        m_globals.CodePage = (XlsBiffSimpleValueRecord)rec;
                        m_encoding         = Encoding.GetEncoding(m_globals.CodePage.Value);
                        break;

                    case BIFFRECORDTYPE.FONT:
                    case BIFFRECORDTYPE.FONT_V34:
                        m_globals.Fonts.Add(rec);
                        break;

                    case BIFFRECORDTYPE.FORMAT:
                    case BIFFRECORDTYPE.FORMAT_V23:
                        m_globals.Formats.Add(rec);
                        break;

                    case BIFFRECORDTYPE.XF:
                    case BIFFRECORDTYPE.XF_V4:
                    case BIFFRECORDTYPE.XF_V3:
                    case BIFFRECORDTYPE.XF_V2:
                        m_globals.ExtendedFormats.Add(rec);
                        break;

                    case BIFFRECORDTYPE.SST:
                        m_globals.SST = (XlsBiffSST)rec;
                        sst           = true;
                        break;

                    case BIFFRECORDTYPE.CONTINUE:
                        if (!sst)
                        {
                            break;
                        }
                        XlsBiffContinue contSST = (XlsBiffContinue)rec;
                        m_globals.SST.Append(contSST);
                        break;

                    case BIFFRECORDTYPE.EXTSST:
                        m_globals.ExtSST = rec;
                        sst = false;
                        break;

                    case BIFFRECORDTYPE.EOF:
                        if (m_globals.SST != null)
                        {
                            m_globals.SST.ReadStrings();
                        }
                        return;

                    default:
                        continue;
                    }
                }
                catch (Exception ex)
                {
                    _log.Error(ex.ToString());
                }
            }
        }
Exemplo n.º 4
0
			public XlsWorksheet(int index, XlsBiffBoundSheet refSheet)
			{
				m_Index = index;
				m_Name = refSheet.SheetName;
				m_dataOffset = refSheet.StartOffset;
			}
        private void readWorkBookGlobals()
        {
            //Read Header
            try
            {
                m_hdr = XlsHeader.ReadHeader(m_file);
            }
            catch (Exceptions.HeaderException ex)
            {
                fail(ex.Message);
                return;
            }
            catch (FormatException ex)
            {
                fail(ex.Message);
                return;
            }

            XlsRootDirectory  dir           = new XlsRootDirectory(m_hdr);
            XlsDirectoryEntry workbookEntry = dir.FindEntry(WORKBOOK) ?? dir.FindEntry(BOOK);

            if (workbookEntry == null)
            {
                fail(Errors.ErrorStreamWorkbookNotFound); return;
            }

            if (workbookEntry.EntryType != STGTY.STGTY_STREAM)
            {
                fail(Errors.ErrorWorkbookIsNotStream); return;
            }

            m_stream = new XlsBiffStream(m_hdr, workbookEntry.StreamFirstSector, workbookEntry.IsEntryMiniStream, dir, this);

            m_globals = new XlsWorkbookGlobals();

            m_stream.Seek(0, SeekOrigin.Begin);

            XlsBiffRecord rec = m_stream.Read();
            XlsBiffBOF    bof = rec as XlsBiffBOF;

            if (bof == null || bof.Type != BIFFTYPE.WorkbookGlobals)
            {
                fail(Errors.ErrorWorkbookGlobalsInvalidData); return;
            }

            bool sst = false;

            m_version = bof.Version;
            m_sheets  = new List <XlsWorksheet>();

            while (null != (rec = m_stream.Read()))
            {
                switch (rec.ID)
                {
                case BIFFRECORDTYPE.INTERFACEHDR:
                    m_globals.InterfaceHdr = (XlsBiffInterfaceHdr)rec;
                    break;

                case BIFFRECORDTYPE.BOUNDSHEET:
                    XlsBiffBoundSheet sheet = (XlsBiffBoundSheet)rec;

                    if (sheet.Type != XlsBiffBoundSheet.SheetType.Worksheet)
                    {
                        break;
                    }

                    sheet.IsV8        = isV8();
                    sheet.UseEncoding = m_encoding;
                    LogManager.Log(this).Debug("BOUNDSHEET IsV8={0}", sheet.IsV8);

                    m_sheets.Add(new XlsWorksheet(m_globals.Sheets.Count, sheet));
                    m_globals.Sheets.Add(sheet);

                    break;

                case BIFFRECORDTYPE.MMS:
                    m_globals.MMS = rec;
                    break;

                case BIFFRECORDTYPE.COUNTRY:
                    m_globals.Country = rec;
                    break;

                case BIFFRECORDTYPE.CODEPAGE:

                    m_globals.CodePage = (XlsBiffSimpleValueRecord)rec;

                    try
                    {
                        m_encoding = Encoding.GetEncoding(m_globals.CodePage.Value);
                    }
                    catch (ArgumentException)
                    {
                        // Warning - Password protection
                        // TODO: Attach to ILog
                    }

                    break;

                case BIFFRECORDTYPE.FONT:
                case BIFFRECORDTYPE.FONT_V34:
                    m_globals.Fonts.Add(rec);
                    break;

                case BIFFRECORDTYPE.FORMAT_V23:
                {
                    var fmt = (XlsBiffFormatString)rec;
                    fmt.UseEncoding = m_encoding;
                    m_globals.Formats.Add((ushort)m_globals.Formats.Count, fmt);
                }
                break;

                case BIFFRECORDTYPE.FORMAT:
                {
                    var fmt = (XlsBiffFormatString)rec;
                    m_globals.Formats.Add(fmt.Index, fmt);
                }
                break;

                case BIFFRECORDTYPE.XF:
                case BIFFRECORDTYPE.XF_V4:
                case BIFFRECORDTYPE.XF_V3:
                case BIFFRECORDTYPE.XF_V2:
                    m_globals.ExtendedFormats.Add(rec);
                    break;

                case BIFFRECORDTYPE.SST:
                    m_globals.SST = (XlsBiffSST)rec;
                    sst           = true;
                    break;

                case BIFFRECORDTYPE.CONTINUE:
                    if (!sst)
                    {
                        break;
                    }
                    XlsBiffContinue contSST = (XlsBiffContinue)rec;
                    m_globals.SST.Append(contSST);
                    break;

                case BIFFRECORDTYPE.EXTSST:
                    m_globals.ExtSST = rec;
                    sst = false;
                    break;

                case BIFFRECORDTYPE.PROTECT:
                case BIFFRECORDTYPE.PASSWORD:
                case BIFFRECORDTYPE.PROT4REVPASSWORD:
                    //IsProtected
                    break;

                case BIFFRECORDTYPE.EOF:
                    if (m_globals.SST != null)
                    {
                        m_globals.SST.ReadStrings();
                    }
                    return;

                default:
                    continue;
                }
            }
        }
Exemplo n.º 6
0
        private void ReadWorkbookGlobals()
        {
            m_globals = new XlsWorkbookGlobals();

            m_stream.Seek(0, SeekOrigin.Begin);

            XlsBiffRecord rec = m_stream.Read();
            XlsBiffBOF    bof = rec as XlsBiffBOF;

            if (bof == null || bof.Type != BIFFTYPE.WorkbookGlobals)
            {
                throw new ArgumentException(Errors.ErrorWorkbookGlobalsInvalidData);
            }

            m_version = bof.Version;

            bool sst = false;

            while (null != (rec = m_stream.Read()))
            {
                switch (rec.ID)
                {
                case BIFFRECORDTYPE.INTERFACEHDR:
                    m_globals.InterfaceHdr = (XlsBiffInterfaceHdr)rec;
                    break;

                case BIFFRECORDTYPE.BOUNDSHEET:
                    XlsBiffBoundSheet sheet = (XlsBiffBoundSheet)rec;

                    if (sheet.Type != XlsBiffBoundSheet.SheetType.Worksheet)
                    {
                        break;
                    }

                    sheet.IsV8        = IsV8();
                    sheet.UseEncoding = m_encoding;

                    m_sheets.Add(new XlsWorksheet(m_globals.Sheets.Count, sheet));
                    m_globals.Sheets.Add(sheet);

                    break;

                case BIFFRECORDTYPE.MMS:
                    m_globals.MMS = rec;
                    break;

                case BIFFRECORDTYPE.COUNTRY:
                    m_globals.Country = rec;
                    break;

                case BIFFRECORDTYPE.CODEPAGE:

                    m_globals.CodePage = (XlsBiffSimpleValueRecord)rec;

                    try
                    {
                        m_encoding = Encoding.GetEncoding(m_globals.CodePage.Value);
                    }
                    catch
                    {
                        // Warning - Password protection
                        // TODO: Attach to ILog
                    }

                    break;

                case BIFFRECORDTYPE.FONT:
                case BIFFRECORDTYPE.FONT_V34:
                    m_globals.Fonts.Add(rec);
                    break;

                case BIFFRECORDTYPE.FORMAT:
                case BIFFRECORDTYPE.FORMAT_V23:
                    m_globals.Formats.Add(rec);
                    break;

                case BIFFRECORDTYPE.XF:
                case BIFFRECORDTYPE.XF_V4:
                case BIFFRECORDTYPE.XF_V3:
                case BIFFRECORDTYPE.XF_V2:
                    m_globals.ExtendedFormats.Add(rec);
                    break;

                case BIFFRECORDTYPE.SST:
                    m_globals.SST = (XlsBiffSST)rec;
                    sst           = true;
                    break;

                case BIFFRECORDTYPE.CONTINUE:
                    if (!sst)
                    {
                        break;
                    }
                    XlsBiffContinue contSST = (XlsBiffContinue)rec;
                    m_globals.SST.Append(contSST);
                    break;

                case BIFFRECORDTYPE.EXTSST:
                    m_globals.ExtSST = rec;
                    sst = false;
                    break;

                case BIFFRECORDTYPE.PROTECT:
                case BIFFRECORDTYPE.PASSWORD:
                case BIFFRECORDTYPE.PROT4REVPASSWORD:
                    m_IsProtected = true;
                    break;

                case BIFFRECORDTYPE.EOF:
                    if (m_globals.SST != null)
                    {
                        m_globals.SST.ReadStrings();
                    }
                    return;

                default:
                    continue;
                }
            }
        }
Exemplo n.º 7
0
 public XlsWorksheet(int index, XlsBiffBoundSheet refSheet)
 {
     m_Index      = index;
     m_Name       = refSheet.SheetName;
     m_dataOffset = refSheet.StartOffset;
 }
Exemplo n.º 8
0
        private void readWorkBookGlobals()
        {
            XlsBiffRecord record;
            bool          flag;

            try
            {
                this.m_hdr = XlsHeader.ReadHeader(this.m_file);
            }
            catch (HeaderException exception)
            {
                this.fail(exception.Message);
                return;
            }
            catch (FormatException exception2)
            {
                this.fail(exception2.Message);
                return;
            }
            XlsRootDirectory  rootDir = new XlsRootDirectory(this.m_hdr);
            XlsDirectoryEntry entry   = rootDir.FindEntry("Workbook") ?? rootDir.FindEntry("Book");

            if (entry != null)
            {
                if (entry.EntryType != STGTY.STGTY_STREAM)
                {
                    this.fail("Error: Workbook directory entry is not a Stream.");
                    return;
                }
                this.m_stream  = new XlsBiffStream(this.m_hdr, entry.StreamFirstSector, entry.IsEntryMiniStream, rootDir);
                this.m_globals = new XlsWorkbookGlobals();
                this.m_stream.Seek(0, SeekOrigin.Begin);
                XlsBiffBOF fbof = this.m_stream.Read() as XlsBiffBOF;
                if ((fbof == null) || (fbof.Type != BIFFTYPE.WorkbookGlobals))
                {
                    this.fail("Error reading Workbook Globals - Stream has invalid data.");
                    return;
                }
                flag           = false;
                this.m_version = fbof.Version;
                this.m_sheets  = new List <XlsWorksheet>();
            }
            else
            {
                this.fail("Error: Neither stream 'Workbook' nor 'Book' was found in file.");
                return;
            }
            while ((record = this.m_stream.Read()) != null)
            {
                BIFFRECORDTYPE iD = record.ID;
                if (iD <= BIFFRECORDTYPE.COUNTRY)
                {
                    switch (iD)
                    {
                    case BIFFRECORDTYPE.FORMAT_V23:
                    {
                        XlsBiffFormatString str = (XlsBiffFormatString)record;
                        str.UseEncoding = this.m_encoding;
                        this.m_globals.Formats.Add((ushort)this.m_globals.Formats.Count, str);
                        break;
                    }

                    case BIFFRECORDTYPE.FONT:
                        goto Label_031C;

                    case BIFFRECORDTYPE.EOF:
                        goto Label_03F3;

                    case BIFFRECORDTYPE.CODEPAGE:
                        goto Label_02E4;

                    case BIFFRECORDTYPE.XF_V2:
                        goto Label_0395;

                    case BIFFRECORDTYPE.CONTINUE:
                        goto Label_03C0;

                    case BIFFRECORDTYPE.BOUNDSHEET:
                    {
                        XlsBiffBoundSheet refSheet = (XlsBiffBoundSheet)record;
                        if (refSheet.Type == XlsBiffBoundSheet.SheetType.Worksheet)
                        {
                            refSheet.IsV8        = this.isV8();
                            refSheet.UseEncoding = this.m_encoding;
                            this.m_sheets.Add(new XlsWorksheet(this.m_globals.Sheets.Count, refSheet));
                            this.m_globals.Sheets.Add(refSheet);
                        }
                        break;
                    }

                    case BIFFRECORDTYPE.COUNTRY:
                        this.m_globals.Country = record;
                        break;
                    }
                }
                else if (iD <= BIFFRECORDTYPE.EXTSST)
                {
                    switch (iD)
                    {
                    case BIFFRECORDTYPE.SST:
                        this.m_globals.SST = (XlsBiffSST)record;
                        flag = true;
                        break;

                    case BIFFRECORDTYPE.EXTSST:
                        this.m_globals.ExtSST = record;
                        flag = false;
                        break;

                    case BIFFRECORDTYPE.XF:
                        goto Label_0395;

                    case BIFFRECORDTYPE.INTERFACEHDR:
                        this.m_globals.InterfaceHdr = (XlsBiffInterfaceHdr)record;
                        break;

                    case BIFFRECORDTYPE.MMS:
                        goto Label_02C0;
                    }
                }
                else if (iD <= BIFFRECORDTYPE.FONT_V34)
                {
                    if ((iD != BIFFRECORDTYPE.PROT4REVPASSWORD) && (iD == BIFFRECORDTYPE.FONT_V34))
                    {
                        goto Label_031C;
                    }
                }
                else
                {
                    switch (iD)
                    {
                    case BIFFRECORDTYPE.XF_V3:
                    case BIFFRECORDTYPE.XF_V4:
                        goto Label_0395;

                    case BIFFRECORDTYPE.FORMAT:
                    {
                        XlsBiffFormatString str2 = (XlsBiffFormatString)record;
                        this.m_globals.Formats.Add(str2.Index, str2);
                        break;
                    }
                    }
                }
                continue;
Label_02C0:
                this.m_globals.MMS = record;
                continue;
Label_02E4:
                this.m_globals.CodePage = (XlsBiffSimpleValueRecord)record;
                try
                {
                    this.m_encoding = Encoding.GetEncoding(this.m_globals.CodePage.Value);
                }
                catch (ArgumentException)
                {
                }
                continue;
Label_031C:
                this.m_globals.Fonts.Add(record);
                continue;
Label_0395:
                this.m_globals.ExtendedFormats.Add(record);
                continue;
Label_03C0:
                if (flag)
                {
                    XlsBiffContinue fragment = (XlsBiffContinue)record;
                    this.m_globals.SST.Append(fragment);
                }
                continue;
Label_03F3:
                if (this.m_globals.SST != null)
                {
                    this.m_globals.SST.ReadStrings();
                }
                return;
            }
        }