示例#1
0
        public void AddImage(string imageName, Stream imageData, ImageFormat format, int rowStart, double rowStartPercentage, int columnStart, double columnStartPercentage, int rowEnd, double rowEndPercentage, int columnEnd, double colEndPercentage, string hyperlinkURL, bool isBookmarkLink)
        {
            if (imageData.CanSeek)
            {
                imageData.Seek(0L, SeekOrigin.Begin);
            }
            if (rowStart < 0)
            {
                rowStart = 0;
            }
            if (columnStart < 0)
            {
                columnStart = 0;
            }
            if (rowEnd < 0)
            {
                rowEnd = 0;
            }
            if (columnEnd < 0)
            {
                columnEnd = 0;
            }
            this.LimitPercentage(ref rowStartPercentage);
            this.LimitPercentage(ref columnStartPercentage);
            this.LimitPercentage(ref rowEndPercentage);
            this.LimitPercentage(ref colEndPercentage);
            Anchor            startPosition     = this._currentSheet.CreateAnchor(rowStart, columnStart, columnStartPercentage, rowStartPercentage);
            Anchor            endPosition       = this._currentSheet.CreateAnchor(rowEnd, columnEnd, colEndPercentage, rowEndPercentage);
            string            extension         = (!(format.Guid == ImageFormat.Bmp.Guid)) ? ((!(format.Guid == ImageFormat.Gif.Guid)) ? ((!(format.Guid == ImageFormat.Jpeg.Guid)) ? "png" : "jpg") : "gif") : "bmp";
            OfficeImageHasher officeImageHasher = new OfficeImageHasher(imageData);
            string            uniqueId          = Convert.ToBase64String(officeImageHasher.Hash);

            imageData.Seek(0L, SeekOrigin.Begin);
            Picture picture = this._currentSheet.Pictures.CreatePicture(uniqueId, extension, imageData, startPosition, endPosition);

            this._picturesStartingOnCurrentRow.Add(picture);
            this.AddPictureToUpdateCollection(ref this._picturesToUpdateByEndRow, rowEnd, picture);
            this.AddPictureToUpdateCollection(ref this._picturesToUpdateByStartColumn, columnStart, picture);
            this.AddPictureToUpdateCollection(ref this._picturesToUpdateByEndColumn, columnEnd, picture);
            if (!string.IsNullOrEmpty(hyperlinkURL))
            {
                if (isBookmarkLink)
                {
                    BookmarkTargetInfo bookmark = default(BookmarkTargetInfo);
                    if (this._bookmarkTargets.TryGetValue(hyperlinkURL, out bookmark))
                    {
                        picture.Hyperlink = this.GetPictureBookmarkLink(bookmark);
                    }
                    else
                    {
                        this._unresolvedPictureBookmarks.Add(new PictureLinkInfo(picture, hyperlinkURL));
                    }
                }
                else
                {
                    picture.Hyperlink = hyperlinkURL;
                }
            }
        }
示例#2
0
 private void FinalizeWorksheet()
 {
     this.FinalizeCell();
     for (int i = this._currentRow.RowNumber; i < this._maxRowIndex; i++)
     {
         this._currentSheet.CreateRow().Height = 0.0;
     }
     this._maxRowIndex = 0;
     foreach (MergeInfo mergedCell in this._mergedCells)
     {
         this._currentSheet.MergeCells(mergedCell.FirstRow, mergedCell.FirstColumn, mergedCell.RowCount, mergedCell.ColumnCount);
     }
     this._mergedCells = new List <MergeInfo>();
     foreach (LinkInfo hyperlink in this._hyperlinks)
     {
         this._currentSheet.CreateHyperlink(hyperlink.AreaFormula, hyperlink.Href, hyperlink.Label);
     }
     this._hyperlinks.Clear();
     for (int num = this._bookmarkLinks.Count - 1; num >= 0; num--)
     {
         BookmarkTargetInfo bookmark = default(BookmarkTargetInfo);
         if (this._bookmarkTargets.TryGetValue(this._bookmarkLinks[num].Href, out bookmark))
         {
             this._currentSheet.CreateHyperlink(this._bookmarkLinks[num].AreaFormula, this.GetCellBookmarkLink(bookmark), this._bookmarkLinks[num].Label);
             this._bookmarkLinks.RemoveAt(num);
         }
     }
     if (this._bookmarkLinks.Count == 0)
     {
         this._currentSheet.Cleanup();
     }
     else
     {
         this._unresolvedStreamsheets.Add(new UnresolvedStreamsheet(this._currentSheet, this._bookmarkLinks));
         this._bookmarkLinks = new List <LinkInfo>();
     }
     this._picturesStartingOnCurrentRow.Clear();
     this._picturesToUpdateByEndColumn.Clear();
     this._picturesToUpdateByEndRow.Clear();
     this._picturesToUpdateByStartColumn.Clear();
 }
示例#3
0
        public void AddBookmarkTarget(string value)
        {
            BookmarkTargetInfo bookmarkTargetInfo = new BookmarkTargetInfo(this._currentSheet.Name, this._currentCell.Name);
            string             cellBookmarkLink   = this.GetCellBookmarkLink(bookmarkTargetInfo);

            for (int num = this._unresolvedStreamsheets.Count - 1; num >= 0; num--)
            {
                if (this._unresolvedStreamsheets[num].ResolveTarget(value, cellBookmarkLink))
                {
                    this._unresolvedStreamsheets.RemoveAt(num);
                }
            }
            string pictureBookmarkLink = this.GetPictureBookmarkLink(bookmarkTargetInfo);

            for (int num2 = this._unresolvedPictureBookmarks.Count - 1; num2 >= 0; num2--)
            {
                if (this._unresolvedPictureBookmarks[num2].Target == value)
                {
                    this._unresolvedPictureBookmarks[num2].Picture.Hyperlink = pictureBookmarkLink;
                    this._unresolvedPictureBookmarks.RemoveAt(num2);
                }
            }
            this._bookmarkTargets[value] = bookmarkTargetInfo;
        }
示例#4
0
 private string GetPictureBookmarkLink(BookmarkTargetInfo bookmark)
 {
     return(string.Format(CultureInfo.InvariantCulture, "#{0}!{1}", bookmark.Sheet, bookmark.Cell));
 }