Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using DocumentFormat.OpenXml;
- using DocumentFormat.OpenXml.Packaging;
- using DocumentFormat.OpenXml.Spreadsheet;
- using Color = DocumentFormat.OpenXml.Spreadsheet.Color;
- using Font = DocumentFormat.OpenXml.Spreadsheet.Font;
- namespace ImageToSpreadsheet
- {
- internal static class Program
- {
- private static void Main(string[] args)
- {
- Console.WriteLine(DateTime.Now);
- var bmp = new Bitmap(args[0]);
- bmp.RotateFlip(RotateFlipType.Rotate270FlipY);
- string xlsPath = args[0] + ".xlsx";
- using (var document = SpreadsheetDocument.Create(xlsPath, SpreadsheetDocumentType.Workbook, true))
- {
- var workbookPart = document.AddWorkbookPart();
- var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
- var book = new Workbook();
- worksheetPart.Worksheet = new Worksheet();
- // Columns
- var columns = new Columns();
- for (int i = 0; i < bmp.Width; i++)
- {
- columns.AppendChild(new Column {Min = (uint) i + 1, Max = (uint) i + 1, Width = (1 - 12 + 5) / 7d + 1, CustomWidth = true});
- }
- worksheetPart.Worksheet.AppendChild(columns);
- // Styles
- Dictionary<System.Drawing.Color, uint> colors;
- var stylesPart = workbookPart.AddNewPart<WorkbookStylesPart>();
- stylesPart.Stylesheet = GenerateStyleSheet(bmp, out colors);
- // Bitmap
- var sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
- for (int i = 0; i < bmp.Height; i++)
- {
- var row = sheetData.AppendChild(new Row {Height = 1.0, CustomHeight = true});
- for (int j = 0; j < bmp.Width; j++)
- {
- var cell = new Cell {StyleIndex = colors[bmp.GetPixel(i, j)]};
- row.AppendChild(cell);
- }
- }
- var sheets = book.AppendChild(new Sheets());
- var sheet = new Sheet
- {
- Name = "Лист1",
- SheetId = 1,
- Id = workbookPart.GetIdOfPart(worksheetPart)
- };
- sheets.AppendChild(sheet);
- document.WorkbookPart.Workbook = book;
- document.WorkbookPart.Workbook.Save();
- workbookPart.Workbook.Save();
- }
- Console.WriteLine(DateTime.Now);
- Console.Read();
- }
- private static Stylesheet GenerateStyleSheet(Bitmap bmp, out Dictionary<System.Drawing.Color, uint> colors)
- {
- var fills = new Fills(
- new Fill(new PatternFill {PatternType = PatternValues.None}),
- new Fill(new PatternFill {PatternType = PatternValues.Gray125}));
- var cellFormats = new CellFormats(new CellFormat {FontId = 0, FillId = 0, BorderId = 0});
- var stylesheet = new Stylesheet(
- new Fonts(
- new Font(
- new FontSize {Val = 11},
- new Color {Rgb = new HexBinaryValue {Value = "000000"}},
- new FontName {Val = "Calibri"})
- ),
- fills,
- new Borders(
- new Border(
- new LeftBorder() ,
- new RightBorder(),
- new TopBorder(),
- new BottomBorder(),
- new DiagonalBorder())
- ),
- cellFormats
- );
- colors = new Dictionary<System.Drawing.Color, uint>();
- var hash = GetColorsSet(bmp);
- uint i = 1;
- foreach (var t in hash)
- {
- fills.AppendChild(
- new Fill(new PatternFill(new ForegroundColor {Rgb = new HexBinaryValue {Value = ToHex(t)}})
- {
- PatternType = PatternValues.Solid
- }));
- cellFormats.AppendChild(new CellFormat {FontId = 0, FillId = i+1, BorderId = 0, ApplyFont = true});
- colors[t] = i++;
- }
- return stylesheet;
- }
- private static string ToHex(System.Drawing.Color c)
- {
- return c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
- }
- private static IEnumerable<System.Drawing.Color> GetColorsSet(Bitmap bmp)
- {
- var hash = new HashSet<System.Drawing.Color>();
- for (int i = 0; i < bmp.Width; i++)
- {
- for (int j = 0; j < bmp.Height; j++)
- {
- hash.Add(bmp.GetPixel(i, j));
- }
- }
- return hash;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement