Giter Club home page Giter Club logo

largexlsx's Issues

Add ZIP64 support for huge files

Hello!

Thanks for such a cool little library.

I got an exception when trying to write a huge file.

System.NotSupportedException: "Attempted to write a stream that is larger than 4GiB without setting the zip64 option"
  at SharpCompress.Writers.Zip.ZipWriter.ZipWritingStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Write(String value)
at System.IO.StreamWriter.Write(String format, Object[] arg)
at LargeXlsx.Worksheet.Write(String value, XlsxStyle style)
at LargeXlsx.XlsxWriter.DoOnWorksheet(Action action)
at testApp.Program.Main(String[] args) in /.../csharp/testApp/Program.cs:49

I have not found a parameter on using the zip64 flag in the library API.
Can you tell me how to solve this problem?

I used .NET Core 5 version. Also tried to use .NET 4.6.2 on a Windows machine - same exception.
Version library - latest (1.2.0).

❯ dotnet --info
.NET SDK (reflecting any global.json):

Version:   5.0.100
 Commit:    5044b93829

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  10.15
 OS Platform: Darwin
 RID:         osx.10.15-x64
 Base Path:   /usr/local/share/dotnet/sdk/5.0.100/

Host (useful for support):
  Version: 5.0.0
  Commit:  cf258a14b7

.NET SDKs installed:
  3.1.404 [/usr/local/share/dotnet/sdk]
  5.0.100 [/usr/local/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 3.1.10 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.10 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

Plans for in-Cell Rich Text support?

Hello! Your library is absolutely wonderful, and I've had a blast with how powerful and intuitive it is to understand! For collaboration/documentation/feedback reasons, I am currently working a tool to dump the text and generate a .xlsx for a game project that I'm developing on a team.

I am looking for solutions to change the color of my text mid-cell, from white, to the other color, and then back to white, although it seems to be unsupported with this library. I am also experiencing linebreak-related issues, although I used the workaround mentioned in another user's Issue for that.

Are there plans to implement in-Cell Rich text support? I think it would be a very useful feature to have 🙏

Thank you for your time, and for the library, too!

Async API introduction

Hi ! I have a question regarding the implementation of the library: will there be any plans for async API for Excel writer? This may seem exotic but it's actually very useful: let's say you want to write an excel file to some external location (for example, AWS S3). You have implemented a new AmazonS3Stream (derived from Stream) for that purpose which sends some requests from time to time using AWS API. Those requests are asynchronous which means that whole new AmazonS3Stream is asynchronous as well. But async Stream API is not supported by the library, so you will need to put GetAwaiter().GetResult() everywhere, which is not very nice :(

So, what would you think if we introduce that into the library? I can help if help is needed.

Since version 1.7.1 the FirstRowNum property is -1

Hi,

I have a Unit Test which checks the generated output of a method which uses your library. To check the output, I use NPOI to read the output and the first row to check some header values. Since the version 1.7.1 the test failed with a NullReference, because i access the first row by using sheet.GetRow(0). By further analyzing i came across the FirstRowNum property which is -1.

Here is an example:

using var stream = new MemoryStream();
using (var xlsxWriter = new XlsxWriter(stream))
{
	xlsxWriter
		.BeginWorksheet("Sheet 1")
		.BeginRow().Write("Name").Write("Location").Write("Height (m)")
		.BeginRow().Write("Kingda Ka").Write("Six Flags Great Adventure").Write(139)
		.BeginRow().Write("Top Thrill Dragster").Write("Cedar Point").Write(130)
		.BeginRow().Write("Superman: Escape from Krypton").Write("Six Flags Magic Mountain").Write(126);
}

stream.Seek(0, SeekOrigin.Begin);

IWorkbook workbook;
using (var file = new MemoryStream(stream.ToArray()))
{
	workbook = new XSSFWorkbook(file);
}
Console.WriteLine(workbook.GetSheet("Sheet 1").FirstRowNum);

With the above example using LargeXlsx version 1.7.0 FirstRowNum is 0, with version 1.7.1 FirstRowNum is -1.

It need to have something to do with the line breaks which you added, but I haven't further analyzed it. Can you please have a look on it?

Broken Excel fail generated when writing to not seekable stream

Hi,

I've tried to use this library to stream Excel files on the fly via ASP.NET Core. My use case prohibits me with caching it in memory and I end up using the raw HTTP response stream. The file generated seems ok at first, but when I load it with Excel it tries to repair it and without any data loss the file is opened.
The only difference between a correct file and the broken one is that the underlying ZIP file has the general purpose bit flag set to (bit 3).
I know that this is more of an Excel issue but did anyone have any luck working around that?

WriteCellRef only if _needsRef is set to true

Hello,

I need to write a Xlsx file with row and cell references (A1, B2, C15, ...).

The only way i found to do this is to call :

  • SkipRows(0) before BeginRow() to write row reference
  • SkipColumns(0) before Write() to add cell reference

I would like to tell LargeXlsx to write rows and cells reference for an entire sheet or workbook.

Suggestion :
Add a bool argument in BeginWorksheet function (maybe false by default) and pass it to Worksheet constructor to set a property to manage this behaviour
Warning : be carreful about managing this new feature with the 'needsRef' existing one.

Is it possible to use an existing excel file?

Hey,
is it possible to fill data into an existing excel file or starts this library always from scratch with an empty excel file?

So, could I do something like this?

File.Copy("Template.xlsx", "data.xlsx");
using var stream = new FileStream("data.xlsx", FileMode.Open, FileAccess.ReadWrite);
using var xlsxWriter = new XlsxWriter(stream);
xlsxWriter
    .BeginWorksheet("Sheet 1")
    .SkipRows(2); // Template headers

foreach(var row in datarows)
{
   xlsxWriter.BeginRow();
   foreach(var cell in row){
      xlsxWriter.Write(cell);
   }
}

Writing multi line cell content

Hi, thanks for the great library.

How to properly write a cell with multi-line string content? I have tried using \n and \r\n in the string, but when opened in Excel, it is shown as single line cell (without the \n or \r\n). The weird part is, the cell become multi-line only after I double-clicked (or editing) that cell in Excel.

Feature Request: Writing boolean values

Thank you for providing this library. I am using it with F#. It works great and dealing with large files was really painful before.

Would it be possible to implement a XlsxWriter.Write(bool) method?

Thanks

Error exporting data to MS Access

Hello!
I'm trying to create a new data source in ms access from an xlsx file that I created using LargeXlsx.
image

But I get the following error:
image

If I just open xlsx in ms excel and resave it (without editing), then the data source is created successfully after that.

The exported excel is too large

Thanks for the great work! I tried to use this, and it really solved the OOM issue caused by the OpenXML SAX. However, the exported excel was too large - using OpenXML SAX, the file was about 240MB, but using LargeXlsx, it was about 1G. Please tell me how to reduce the size. Thank you.

By the way, I have already removed all styles, and the initialize of xlsxWriter I use is :
using (var xlsxWriter = new XlsxWriter(stream, SharpCompress.Compressors.Deflate.CompressionLevel.BestCompression, true))

Hide Worksheet

hi.
I would like to get functionality for hiding worksheet in Excel

Q&A : DateTime format column

I want to use LargeXlsx 1.7.3 to write large data.
I also want format datetime column look like "yyyy/MM/dd HH:mm:ss" , how to format it ?
Thanks

Excel reporting file as faulty, when colspan larger than 2 used on any cell - from 1.9.0

Hi there,
We have discovered issue occurring in newest version (1.9.0).

When you prepare an xlsx with cell, using colspan larger than 2, Excel reports it as faulty and intends to repair it upon opening.
This problem wasn't present in previous version (1.8.0).
We are using you nuget package in solution that runs on linux server (Debian 11 currently).

Belowe you have test code and example excel file.

  using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Write))
  using (var xlsxWriter = new XlsxWriter(stream))
  {

      xlsxWriter.BeginWorksheet("Test");
      xlsxWriter.BeginRow();
      xlsxWriter.BeginRow();

      xlsxWriter.Write("");
      xlsxWriter.Write("Broken", null, 3);

  }

testExcel_20240124_175629.xlsx

Creating column span using Write(value, style, span) method produces invalid xlsx unless SkipColumns(n - 2) called

Task:
I want to have multi column spanned headers for table

The code for reproducing bug:

using (var stream = new FileStream(reportOutputFilePath, FileMode.Create, FileAccess.Write))
using (var writer = new XlsxWriter(stream, requireCellReferences: false))
{
    writer.BeginWorksheet("Test").BeginRow();
    writer.Write("first", XlsxStyle.Default, 3);
    writer.Write("Second", XlsxStyle.Default, 4);
}

Problem:
Excel complains with error:
"We found a problem with some content in "output2.xlsx". Do you want us to try to recover as much as we can? If you trust.. click Yes"

If I click "Yes" here is what "fixed" looks like:
image

Things of note:
It requires me to set requireCellReferences = false, else i get same error no matter what

Solution:

using (var stream = new FileStream(reportOutputFilePath, FileMode.Create, FileAccess.Write))
using (var writer = new XlsxWriter(stream, requireCellReferences: false))
{
    writer.BeginWorksheet("Test").BeginRow();
    writer.Write("first", XlsxStyle.Default, 3).SkipColumns(1);
    writer.Write("Second", XlsxStyle.Default, 4).SkipColumns(1); // This trailing one can be anything since we don't write after it
}

The value of skipped columns must be columnSpan - 2 for it to work.
Skipping columns less than N-2 causes error, skipping more, works as intended (moving insertion point forward)

Can someone help me with this, is this bug? is this normal? am I doing it wrong? is the new excel just picky?

Also here is XML of the error:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <logFileName>error320960_08.xml</logFileName>
    <summary>Errors were detected in file 'C:\Workspace\output2.xlsx'</summary>
    <removedRecords>
        <removedRecord>Removed Records: Cell information from /xl/worksheets/sheet1.xml part</removedRecord>
        <removedRecord>Removed Records: Merge cells from /xl/worksheets/sheet1.xml part</removedRecord>
    </removedRecords>
</recoveryLog>

MemoryStream supported?

Is the FileStream a constraint to use XlsxWriter? Is a MemoryStream supported to generate an xlsx file?

Generated *.xlsx not always deemed as proper excel files.

Hi 🙋‍♀️,

I'm using your awesome LargeXlsx library (version 1.6.3) with .NET 7.0.101 to generate SAP journal entries files that are then uploaded to SAP (accordingly to their their doc).

Expand / Collapse the C# implementation

AccrualsGenerator.cs:

using LargeXlsx;
using SharpCompress.Compressors.Deflate;

namespace ExcelMeh;

public static class AccrualsGenerator
{
    public static void Generate(string path)
    {
        using var stream = new FileStream(path, FileMode.Create, FileAccess.Write);
        using var xlsxWriter = new XlsxWriter(stream, CompressionLevel.BestCompression, true);

        xlsxWriter.SetDefaultStyle(Constants.Styles.Default)
            .BeginWorksheet(Constants.Values.WorksheetName, columns: Constants.ColumnsMin)
            .BeginRow()
                .Write(Constants.Values.Title, Constants.Styles.Title)
            .BeginRows(Constants.Values.Comments, Constants.Styles.Bold)
            .BeginRow()
                .Write(Constants.Values.BatchId, Constants.Styles.DarkYellowBg)
                .Write(Constants.Styles.DarkYellowBg)
            .SkipRows(2)
            .BeginRow(style: Constants.Styles.DarkBlueBoldBgLeft)
                .Write(1, Constants.Styles.DarkBlueBoldBg)
                .WriteSharedString(Constants.Values.Header, Constants.Styles.DarkBlueBoldBg)
            .BeginRow()
                .SkipColumns(1).WriteSharedStrings(Constants.Values.HeaderColumNamesMin, Constants.Styles.LightBlueBg)
            .BeginRow()
                .SkipColumns(1).WriteSharedStrings(Constants.Values.HeaderColumDescriptionsMin, Constants.Styles.LightBlueBg)
            .BeginRow()
                .SkipColumns(1)
                .Write("FR01")
                .Write("AD")
                .Write(new DateTime(2023, 01, 01), Constants.Styles.ShortDate)
                .Write(new DateTime(2023, 01, 01), Constants.Styles.ShortDate)
                .Write("MERC11-1111444-55500")
                .Write("EUR")
            .SkipRows(1)
            .BeginRow()
                .SkipColumns(1)
                .WriteSharedString(Constants.Values.LineItems, Constants.Styles.BlueBg)
            .BeginRow()
                .SkipColumns(4)
                .WriteSharedString(Constants.Values.TransactionCurrency, Constants.Styles.LightBlueBg, 2)
            .BeginRow()
                .SkipColumns(1)
                .WriteSharedStrings(Constants.Values.LineItemColumnNamesMin, Constants.Styles.LightBlueBg)
            .BeginRow()
                .SkipColumns(1)
                .WriteSharedStrings(Constants.Values.LineItemColumnDescriptionsMin, Constants.Styles.LightBlueBg)
            .BeginRow()
                .SkipColumns(1)
                .Write("FR01")
                .Write("63333333")
                .Write("FNP-MERC-4242424-23232-898989/0101-E3 Meow")
                .Write(35.09)
                .SkipColumns(1)
                .Write("V0")
                .Write("FR01010002_0013")
                .Write("7226")
            .BeginRow()
                .SkipColumns(1)
                .Write("FR01")
                .Write("11100")
                .Write("FNP-MERC-4242424-23232-898989/0101-E3 Meow")
                .Write(7.02)
                .SkipColumns(1)
                .Write("V0")
                .Write("FR01010002_0013")
                .Write("7226")
            .BeginRow()
                .SkipColumns(1)
                .Write("FR01")
                .Write("240205")
                .Write("FNP-MERC-4242424-23232-898989/0101-E3 Meow")
                .SkipColumns(1)
                .Write(42.11)
                .Write("V0")
                .Write("FR01010002_0013")
                .Write("7226")
            .BeginRow();
    }
}

Constants.cs:

using System.Drawing;
using LargeXlsx;

namespace ExcelMeh;

public static class Constants
{
    public static class Colors
    {
        public static readonly Color DarkYellow = Color.FromArgb(255, 192, 0);
        public static readonly Color Blue = Color.FromArgb(180, 198, 231);
        public static readonly Color DarkBlue = Color.FromArgb(142, 169, 219);
        public static readonly Color LightBlue = Color.FromArgb(237, 241, 249);
        public static readonly Color ForestGreen = Color.FromArgb(169, 208, 142);
    }

    public static class Fills
    {
        public static readonly XlsxFill DarkYellow = new(Colors.DarkYellow);
        public static readonly XlsxFill DarkBlue = new(Colors.DarkBlue);
        public static readonly XlsxFill Blue = new(Colors.Blue);
        public static readonly XlsxFill LightBlue = new(Colors.LightBlue);
        public static readonly XlsxFill ForestGreen = new(Colors.ForestGreen);
    }

    public static class Alignments
    {
        public static readonly XlsxAlignment Left = new(XlsxAlignment.Horizontal.Left);
        public static readonly XlsxAlignment Center = new(XlsxAlignment.Horizontal.Center);
        public static readonly XlsxAlignment Right = new(XlsxAlignment.Horizontal.Right);
    }

    public static class Fonts
    {
        public const string Name = "Calibri";
        public const double Size = 10;
        public const double TitleSize = 13;
        public const double BoldSize = 11;

        public static readonly XlsxFont Default = new(Name, Size, Color.Empty);
        public static readonly XlsxFont Title = Default.WithSize(TitleSize);
        public static readonly XlsxFont Bold = Default.WithSize(BoldSize).WithBold();
    }

    public static class NumberFormats
    {
        public const string ShortDatePattern = "DD/MM/YYYY";
        public static readonly XlsxNumberFormat ShortDate = new(ShortDatePattern);
    }

    public static class Styles
    {
        public static readonly XlsxStyle Default =
            XlsxStyle.Default.With(Fonts.Default);

        public static readonly XlsxStyle Title =
            XlsxStyle.Default.With(Fonts.Title);

        public static readonly XlsxStyle Bold =
            XlsxStyle.Default.With(Fonts.Bold);

        public static readonly XlsxStyle DarkYellowBg =
            XlsxStyle.Default.With(Fills.DarkYellow);

        public static readonly XlsxStyle DarkBlueBoldBg =
            Bold.With(Fills.DarkBlue).With(Alignments.Right);
        public static readonly XlsxStyle DarkBlueBoldBgLeft =
            Bold.With(Fills.DarkBlue).With(Alignments.Left);

        public static readonly XlsxStyle BlueBg =
            Default.With(Fills.Blue).With(Alignments.Left);

        public static readonly XlsxStyle LightBlueBg =
            Default.With(Fills.LightBlue).With(Alignments.Center);


        public static readonly XlsxStyle LightGreenBg =
            Default.With(Fills.ForestGreen).With(Alignments.Center);

        public static readonly XlsxStyle ShortDate =
            Default.With(NumberFormats.ShortDate);
    }

    private const double InToPxRatio = 13;

    public static readonly IReadOnlyCollection<XlsxColumn> ColumnsMin = new[]
    {
        XlsxColumn.Formatted(0.54 * InToPxRatio),
        XlsxColumn.Formatted(1.39 * InToPxRatio),
        XlsxColumn.Formatted(1.54 * InToPxRatio),
        XlsxColumn.Formatted(3.53 * InToPxRatio),
        XlsxColumn.Formatted(1.12 * InToPxRatio),
        XlsxColumn.Formatted(1.80 * InToPxRatio),
        XlsxColumn.Formatted(1.80 * InToPxRatio),
        XlsxColumn.Formatted(1.42 * InToPxRatio),
        XlsxColumn.Formatted(1.93 * InToPxRatio)
    };

    public static readonly IReadOnlyCollection<XlsxColumn> Columns = new[]
    {
        XlsxColumn.Formatted(0.54 * InToPxRatio),
        XlsxColumn.Formatted(1.39 * InToPxRatio),
        XlsxColumn.Formatted(1.85 * InToPxRatio),
        XlsxColumn.Formatted(3.86 * InToPxRatio),
        XlsxColumn.Formatted(1.62 * InToPxRatio),
        XlsxColumn.Formatted(1.39 * InToPxRatio),
        XlsxColumn.Formatted(2.47 * InToPxRatio),
        XlsxColumn.Formatted(2.93 * InToPxRatio),
        XlsxColumn.Formatted(1.31 * InToPxRatio),
        XlsxColumn.Formatted(1.70 * InToPxRatio),
        XlsxColumn.Formatted(2.01 * InToPxRatio),
        XlsxColumn.Formatted(2.39 * InToPxRatio),
        XlsxColumn.Formatted(2.01 * InToPxRatio),
        XlsxColumn.Formatted(1.62 * InToPxRatio),
        XlsxColumn.Formatted(2.47 * InToPxRatio),
        XlsxColumn.Formatted(1.16 * InToPxRatio),
        XlsxColumn.Formatted(1.78 * InToPxRatio),
        XlsxColumn.Formatted(1.78 * InToPxRatio),
        XlsxColumn.Formatted(1.54 * InToPxRatio),
        XlsxColumn.Formatted(2.85 * InToPxRatio),
        XlsxColumn.Formatted(1.08 * InToPxRatio),
        XlsxColumn.Formatted(1.54 * InToPxRatio),
        XlsxColumn.Formatted(1.47 * InToPxRatio),
        XlsxColumn.Formatted(1.62 * InToPxRatio),
        XlsxColumn.Formatted(1.93 * InToPxRatio),
        XlsxColumn.Formatted(1.62 * InToPxRatio)
    };

    public static class Values
    {
        public const string WorksheetName = "General Journal Entry";
        public const string Title = "Upload General Journal Entry";
        public const string BatchId = "Batch ID";
        public const string Header = "Header";
        public const string LineItems = "Line Items";
        public const string TransactionCurrency = "Transaction Currency";

        public static readonly IReadOnlyCollection<string> Comments = new[]
        {
            "// To add field columns to the template, please add technical names.",
            "// For a complete list of field columns and their technical names, choose ? in the right upper corner of the app screen and then view the Browse entry of web assistance.",
            "// If you want to add more Profitability Segment (CO-PA) fields, make sure that you add the 'PROF_' prefix in the technical names of the CO-PA fields."
        };

        public static readonly IReadOnlyCollection<string> HeaderColumNamesMin = new[]
        {
            "BUKRS",
            "BLART",
            "BLDAT",
            "BUDAT",
            "BKTXT",
            "WAERS"
        };

        public static readonly IReadOnlyCollection<string> HeaderColumDescriptionsMin = new[]
        {
            "*Company Code (4)",
            "*Journal Entry Type (2)",
            "*Journal Entry Date",
            "*Posting Date",
            "Document Header Text (25)",
            "*Transaction Currency (5)"
        };

        public static readonly IReadOnlyCollection<string> LineItemColumnNamesMin = new[]
        {
            "BUKRS",
            "HKONT",
            "SGTXT",
            "WRSOL",
            "WRHAB",
            "MWSKZ",
            "PS_POSID",
            "YY1_SUPPLIER_ACCRUAL_COB"
        };

        public static readonly IReadOnlyCollection<string> LineItemColumnDescriptionsMin = new[]
        {
            "Company Code (4)",
            "G/L Account (10)",
            "Item Text (50)",
            "Debit",
            "Credit",
            "Tax Code (2)",
            "WBS Element (24)",
            "Supplier Accrual (10)"
        };
    }
}

XlsxWriterExtensions:

using LargeXlsx;

namespace ExcelMeh;

public static class XlsxWriterExtensions
{
    public static XlsxWriter WriteSharedStrings(this XlsxWriter source, IEnumerable<string> values, XlsxStyle style)
    {
        foreach (var value in values)
        {
            source.WriteSharedString(value, style);
        }

        return source;
    }

    public static XlsxWriter BeginRows(this XlsxWriter source, IEnumerable<string> values, XlsxStyle style)
    {
        foreach (var value in values)
        {
            source.BeginRow().Write(value, style);
        }

        return source;
    }
}

Process.cs:

using LargeXlsx;

namespace ExcelMeh;

public static class XlsxWriterExtensions
{
    public static XlsxWriter WriteSharedStrings(this XlsxWriter source, IEnumerable<string> values, XlsxStyle style)
    {
        foreach (var value in values)
        {
            source.WriteSharedString(value, style);
        }

        return source;
    }

Program.cs:

using ExcelMeh;

const string path = @"C:\Users\natalie-perret\Desktop\test.xlsx";
AccrualsGenerator.Generate(path);
DefaultApp.StartDefault(path);

If I'm trying to use the file as-is after they have been generated to push them to SAP, it doesn't work:

image

But if I open them with Libre Office or MS Office and save them, I can then push to SAP:

image

image

File Examples:

Expand / Collapse to see the substantial changes found between the two files / archives (since `*.xslx` are `*.zip` containing `*.xml`'s in disguise)

test - original\xl\styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <numFmts count="1">
        <numFmt numFmtId="164" formatCode="DD/MM/YYYY"/>
    </numFmts>
    <fonts count="4">
        <font>
            <sz val="11"/>
            <color rgb="000000"/>
            <name val="Calibri"/>
            <family val="2"/>
        </font>
        <font>
            <sz val="13"/>
            <color rgb="000000"/>
            <name val="Calibri"/>
            <family val="2"/>
        </font>
        <font>
            <sz val="11"/>
            <color rgb="000000"/>
            <name val="Calibri"/>
            <family val="2"/>
            <b/>
        </font>
        <font>
            <sz val="10"/>
            <color rgb="000000"/>
            <name val="Calibri"/>
            <family val="2"/>
        </font>
    </fonts>
    <fills count="6">
        <fill>
            <patternFill patternType="none">
                <fgColor rgb="ffffff"/>
                <bgColor rgb="ffffff"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="gray125">
                <fgColor rgb="ffffff"/>
                <bgColor rgb="ffffff"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="ffc000"/>
                <bgColor rgb="ffc000"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="8ea9db"/>
                <bgColor rgb="8ea9db"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="edf1f9"/>
                <bgColor rgb="edf1f9"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="b4c6e7"/>
                <bgColor rgb="b4c6e7"/>
            </patternFill>
        </fill>
    </fills>
    <borders count="1">
        <border diagonalDown="0" diagonalUp="0">
            <left/>
            <right/>
            <top/>
            <bottom/>
            <diagonal/>
        </border>
    </borders>
    <cellXfs count="10">
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1"/>
        <xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1"/>
        <xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1"/>
        <xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1"/>
        <xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
            <alignment horizontal="left"/>
        </xf>
        <xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
            <alignment horizontal="right"/>
        </xf>
        <xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
            <alignment horizontal="center"/>
        </xf>
        <xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1"/>
        <xf numFmtId="164" fontId="3" fillId="0" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1"/>
        <xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
            <alignment horizontal="left"/>
        </xf>
    </cellXfs>
</styleSheet>

test - original\xl\worksheets\sheet1.xml:

<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <sheetViews>
        <sheetView workbookViewId="0" rightToLeft="0">
        </sheetView>
    </sheetViews>
    <cols>
        <col min="1" max="1" width="7.0200000000000005" customWidth="1"/>
        <col min="2" max="2" width="18.07" customWidth="1"/>
        <col min="3" max="3" width="20.02" customWidth="1"/>
        <col min="4" max="4" width="45.89" customWidth="1"/>
        <col min="5" max="5" width="14.560000000000002" customWidth="1"/>
        <col min="6" max="6" width="23.400000000000002" customWidth="1"/>
        <col min="7" max="7" width="23.400000000000002" customWidth="1"/>
        <col min="8" max="8" width="18.46" customWidth="1"/>
        <col min="9" max="9" width="25.09" customWidth="1"/>
    </cols>
    <sheetData>
        <row r="1">
            <c r="A1" s="1" t="inlineStr">
                <is>
                    <t>Upload General Journal Entry</t>
                </is>
            </c>
        </row>
        <row r="2">
            <c r="A2" s="2" t="inlineStr">
                <is>
                    <t>// To add field columns to the template, please add technical names.</t>
                </is>
            </c>
        </row>
        <row r="3">
            <c r="A3" s="2" t="inlineStr">
                <is>
                    <t>// For a complete list of field columns and their technical names, choose ? in the right upper corner of the app screen and then view the Browse entry of web assistance.</t>
                </is>
            </c>
        </row>
        <row r="4">
            <c r="A4" s="2" t="inlineStr">
                <is>
                    <t>// If you want to add more Profitability Segment (CO-PA) fields, make sure that you add the 'PROF_' prefix in the technical names of the CO-PA fields.</t>
                </is>
            </c>
        </row>
        <row r="5">
            <c r="A5" s="3" t="inlineStr">
                <is>
                    <t>Batch ID</t>
                </is>
            </c>
            <c r="B5" s="3"/>
        </row>
        <row r="8" s="4" customFormat="1">
            <c r="A8" s="5">
                <v>1</v>
            </c>
            <c r="B8" s="5" t="s">
                <v>0</v>
            </c>
        </row>
        <row r="9">
            <c r="B9" s="6" t="s">
                <v>1</v>
            </c>
            <c r="C9" s="6" t="s">
                <v>2</v>
            </c>
            <c r="D9" s="6" t="s">
                <v>3</v>
            </c>
            <c r="E9" s="6" t="s">
                <v>4</v>
            </c>
            <c r="F9" s="6" t="s">
                <v>5</v>
            </c>
            <c r="G9" s="6" t="s">
                <v>6</v>
            </c>
        </row>
        <row r="10">
            <c r="B10" s="6" t="s">
                <v>7</v>
            </c>
            <c r="C10" s="6" t="s">
                <v>8</v>
            </c>
            <c r="D10" s="6" t="s">
                <v>9</v>
            </c>
            <c r="E10" s="6" t="s">
                <v>10</v>
            </c>
            <c r="F10" s="6" t="s">
                <v>11</v>
            </c>
            <c r="G10" s="6" t="s">
                <v>12</v>
            </c>
        </row>
        <row r="11">
            <c r="B11" s="7" t="inlineStr">
                <is>
                    <t>FR01</t>
                </is>
            </c>
            <c r="C11" s="7" t="inlineStr">
                <is>
                    <t>AD</t>
                </is>
            </c>
            <c r="D11" s="8">
                <v>44927</v>
            </c>
            <c r="E11" s="8">
                <v>44927</v>
            </c>
            <c r="F11" s="7" t="inlineStr">
                <is>
                    <t>MERC11-1111444-55500</t>
                </is>
            </c>
            <c r="G11" s="7" t="inlineStr">
                <is>
                    <t>EUR</t>
                </is>
            </c>
        </row>
        <row r="13">
            <c r="B13" s="9" t="s">
                <v>13</v>
            </c>
        </row>
        <row r="14">
            <c r="E14" s="6" t="s">
                <v>14</v>
            </c>
            <c r="F14" s="6"/>
        </row>
        <row r="15">
            <c r="B15" s="6" t="s">
                <v>1</v>
            </c>
            <c r="C15" s="6" t="s">
                <v>15</v>
            </c>
            <c r="D15" s="6" t="s">
                <v>16</v>
            </c>
            <c r="E15" s="6" t="s">
                <v>17</v>
            </c>
            <c r="F15" s="6" t="s">
                <v>18</v>
            </c>
            <c r="G15" s="6" t="s">
                <v>19</v>
            </c>
            <c r="H15" s="6" t="s">
                <v>20</v>
            </c>
            <c r="I15" s="6" t="s">
                <v>21</v>
            </c>
        </row>
        <row r="16">
            <c r="B16" s="6" t="s">
                <v>22</v>
            </c>
            <c r="C16" s="6" t="s">
                <v>23</v>
            </c>
            <c r="D16" s="6" t="s">
                <v>24</v>
            </c>
            <c r="E16" s="6" t="s">
                <v>25</v>
            </c>
            <c r="F16" s="6" t="s">
                <v>26</v>
            </c>
            <c r="G16" s="6" t="s">
                <v>27</v>
            </c>
            <c r="H16" s="6" t="s">
                <v>28</v>
            </c>
            <c r="I16" s="6" t="s">
                <v>29</v>
            </c>
        </row>
        <row r="17">
            <c r="B17" s="7" t="inlineStr">
                <is>
                    <t>FR01</t>
                </is>
            </c>
            <c r="C17" s="7" t="inlineStr">
                <is>
                    <t>63333333</t>
                </is>
            </c>
            <c r="D17" s="7" t="inlineStr">
                <is>
                    <t>FNP-MERC-4242424-23232-898989/0101-E3 Meow</t>
                </is>
            </c>
            <c r="E17" s="7">
                <v>35.09</v>
            </c>
            <c r="G17" s="7" t="inlineStr">
                <is>
                    <t>V0</t>
                </is>
            </c>
            <c r="H17" s="7" t="inlineStr">
                <is>
                    <t>FR01010002_0013</t>
                </is>
            </c>
            <c r="I17" s="7" t="inlineStr">
                <is>
                    <t>7226</t>
                </is>
            </c>
        </row>
        <row r="18">
            <c r="B18" s="7" t="inlineStr">
                <is>
                    <t>FR01</t>
                </is>
            </c>
            <c r="C18" s="7" t="inlineStr">
                <is>
                    <t>11100</t>
                </is>
            </c>
            <c r="D18" s="7" t="inlineStr">
                <is>
                    <t>FNP-MERC-4242424-23232-898989/0101-E3 Meow</t>
                </is>
            </c>
            <c r="E18" s="7">
                <v>7.02</v>
            </c>
            <c r="G18" s="7" t="inlineStr">
                <is>
                    <t>V0</t>
                </is>
            </c>
            <c r="H18" s="7" t="inlineStr">
                <is>
                    <t>FR01010002_0013</t>
                </is>
            </c>
            <c r="I18" s="7" t="inlineStr">
                <is>
                    <t>7226</t>
                </is>
            </c>
        </row>
        <row r="19">
            <c r="B19" s="7" t="inlineStr">
                <is>
                    <t>FR01</t>
                </is>
            </c>
            <c r="C19" s="7" t="inlineStr">
                <is>
                    <t>240205</t>
                </is>
            </c>
            <c r="D19" s="7" t="inlineStr">
                <is>
                    <t>FNP-MERC-4242424-23232-898989/0101-E3 Meow</t>
                </is>
            </c>
            <c r="F19" s="7">
                <v>42.11</v>
            </c>
            <c r="G19" s="7" t="inlineStr">
                <is>
                    <t>V0</t>
                </is>
            </c>
            <c r="H19" s="7" t="inlineStr">
                <is>
                    <t>FR01010002_0013</t>
                </is>
            </c>
            <c r="I19" s="7" t="inlineStr">
                <is>
                    <t>7226</t>
                </is>
            </c>
        </row>
        <row r="20">
        </row>
    </sheetData>
    <mergeCells count="1">
        <mergeCell ref="E14:F14"/>
    </mergeCells>
</worksheet>

test - saved with editor\xl\styles.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <numFmts count="2">
        <numFmt numFmtId="164" formatCode="General"/>
        <numFmt numFmtId="165" formatCode="dd/mm/yyyy"/>
    </numFmts>
    <fonts count="8">
        <font>
            <sz val="10"/>
            <name val="Arial"/>
            <family val="2"/>
        </font>
        <font>
            <sz val="10"/>
            <name val="Arial"/>
            <family val="0"/>
        </font>
        <font>
            <sz val="10"/>
            <name val="Arial"/>
            <family val="0"/>
        </font>
        <font>
            <sz val="10"/>
            <name val="Arial"/>
            <family val="0"/>
        </font>
        <font>
            <sz val="13"/>
            <color rgb="FF000000"/>
            <name val="Calibri"/>
            <family val="2"/>
            <charset val="1"/>
        </font>
        <font>
            <b val="true"/>
            <sz val="11"/>
            <color rgb="FF000000"/>
            <name val="Calibri"/>
            <family val="2"/>
            <charset val="1"/>
        </font>
        <font>
            <sz val="11"/>
            <color rgb="FF000000"/>
            <name val="Calibri"/>
            <family val="2"/>
            <charset val="1"/>
        </font>
        <font>
            <sz val="10"/>
            <color rgb="FF000000"/>
            <name val="Calibri"/>
            <family val="2"/>
            <charset val="1"/>
        </font>
    </fonts>
    <fills count="6">
        <fill>
            <patternFill patternType="none"/>
        </fill>
        <fill>
            <patternFill patternType="gray125"/>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="FFFFC000"/>
                <bgColor rgb="FFFF9900"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="FF8EA9DB"/>
                <bgColor rgb="FF969696"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="FFEDF1F9"/>
                <bgColor rgb="FFFFFFCC"/>
            </patternFill>
        </fill>
        <fill>
            <patternFill patternType="solid">
                <fgColor rgb="FFB4C6E7"/>
                <bgColor rgb="FFCCCCFF"/>
            </patternFill>
        </fill>
    </fills>
    <borders count="1">
        <border diagonalUp="false" diagonalDown="false">
            <left/>
            <right/>
            <top/>
            <bottom/>
            <diagonal/>
        </border>
    </borders>
    <cellStyleXfs count="20">
        <xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="true">
            <alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="43" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="41" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="44" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="42" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
        <xf numFmtId="9" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
    </cellStyleXfs>
    <cellXfs count="10">
        <xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyFont="false" applyBorder="false" applyAlignment="false" applyProtection="false">
            <alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="4" fillId="0" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="false" applyProtection="false">
            <alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="false" applyProtection="false">
            <alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="6" fillId="2" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="false" applyProtection="false">
            <alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="5" fillId="3" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
            <alignment horizontal="right" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="5" fillId="3" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
            <alignment horizontal="left" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="7" fillId="4" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
            <alignment horizontal="center" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="7" fillId="0" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="false" applyProtection="false">
            <alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="165" fontId="7" fillId="0" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="false" applyProtection="false">
            <alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
        <xf numFmtId="164" fontId="7" fillId="5" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
            <alignment horizontal="left" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false"/>
            <protection locked="true" hidden="false"/>
        </xf>
    </cellXfs>
    <cellStyles count="6">
        <cellStyle name="Normal" xfId="0" builtinId="0"/>
        <cellStyle name="Comma" xfId="15" builtinId="3"/>
        <cellStyle name="Comma [0]" xfId="16" builtinId="6"/>
        <cellStyle name="Currency" xfId="17" builtinId="4"/>
        <cellStyle name="Currency [0]" xfId="18" builtinId="7"/>
        <cellStyle name="Percent" xfId="19" builtinId="5"/>
    </cellStyles>
    <colors>
        <indexedColors>
            <rgbColor rgb="FF000000"/>
            <rgbColor rgb="FFEDF1F9"/>
            <rgbColor rgb="FFFF0000"/>
            <rgbColor rgb="FF00FF00"/>
            <rgbColor rgb="FF0000FF"/>
            <rgbColor rgb="FFFFFF00"/>
            <rgbColor rgb="FFFF00FF"/>
            <rgbColor rgb="FF00FFFF"/>
            <rgbColor rgb="FF800000"/>
            <rgbColor rgb="FF008000"/>
            <rgbColor rgb="FF000080"/>
            <rgbColor rgb="FF808000"/>
            <rgbColor rgb="FF800080"/>
            <rgbColor rgb="FF008080"/>
            <rgbColor rgb="FFB4C6E7"/>
            <rgbColor rgb="FF808080"/>
            <rgbColor rgb="FF8EA9DB"/>
            <rgbColor rgb="FF993366"/>
            <rgbColor rgb="FFFFFFCC"/>
            <rgbColor rgb="FFCCFFFF"/>
            <rgbColor rgb="FF660066"/>
            <rgbColor rgb="FFFF8080"/>
            <rgbColor rgb="FF0066CC"/>
            <rgbColor rgb="FFCCCCFF"/>
            <rgbColor rgb="FF000080"/>
            <rgbColor rgb="FFFF00FF"/>
            <rgbColor rgb="FFFFFF00"/>
            <rgbColor rgb="FF00FFFF"/>
            <rgbColor rgb="FF800080"/>
            <rgbColor rgb="FF800000"/>
            <rgbColor rgb="FF008080"/>
            <rgbColor rgb="FF0000FF"/>
            <rgbColor rgb="FF00CCFF"/>
            <rgbColor rgb="FFCCFFFF"/>
            <rgbColor rgb="FFCCFFCC"/>
            <rgbColor rgb="FFFFFF99"/>
            <rgbColor rgb="FF99CCFF"/>
            <rgbColor rgb="FFFF99CC"/>
            <rgbColor rgb="FFCC99FF"/>
            <rgbColor rgb="FFFFCC99"/>
            <rgbColor rgb="FF3366FF"/>
            <rgbColor rgb="FF33CCCC"/>
            <rgbColor rgb="FF99CC00"/>
            <rgbColor rgb="FFFFC000"/>
            <rgbColor rgb="FFFF9900"/>
            <rgbColor rgb="FFFF6600"/>
            <rgbColor rgb="FF666699"/>
            <rgbColor rgb="FF969696"/>
            <rgbColor rgb="FF003366"/>
            <rgbColor rgb="FF339966"/>
            <rgbColor rgb="FF003300"/>
            <rgbColor rgb="FF333300"/>
            <rgbColor rgb="FF993300"/>
            <rgbColor rgb="FF993366"/>
            <rgbColor rgb="FF333399"/>
            <rgbColor rgb="FF333333"/>
        </indexedColors>
    </colors>
</styleSheet>

test - saved with editor\xl\worksheets\sheet1.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
    xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
    xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
    xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
    <sheetPr filterMode="false">
        <pageSetUpPr fitToPage="false"/>
    </sheetPr>
    <dimension ref="A1:I19"/>
    <sheetViews>
        <sheetView showFormulas="false" showGridLines="true" showRowColHeaders="true" showZeros="true" rightToLeft="false" tabSelected="true" showOutlineSymbols="true" defaultGridColor="true" view="normal" topLeftCell="A1" colorId="64" zoomScale="100" zoomScaleNormal="100" zoomScalePageLayoutView="100" workbookViewId="0">
            <selection pane="topLeft" activeCell="A1" activeCellId="0" sqref="A1"/>
        </sheetView>
    </sheetViews>
    <sheetFormatPr defaultColWidth="8.515625" defaultRowHeight="12.8" zeroHeight="false" outlineLevelRow="0" outlineLevelCol="0"></sheetFormatPr>
    <cols>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="1" min="1" style="0" width="7.02"/>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="2" min="2" style="0" width="18.07"/>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="3" min="3" style="0" width="20.03"/>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="4" min="4" style="0" width="45.89"/>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="5" min="5" style="0" width="14.56"/>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="7" min="6" style="0" width="23.4"/>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="8" min="8" style="0" width="18.46"/>
        <col collapsed="false" customWidth="true" hidden="false" outlineLevel="0" max="9" min="9" style="0" width="25.09"/>
    </cols>
    <sheetData>
        <row r="1" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="A1" s="1" t="s">
                <v>0</v>
            </c>
        </row>
        <row r="2" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="A2" s="2" t="s">
                <v>1</v>
            </c>
        </row>
        <row r="3" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="A3" s="2" t="s">
                <v>2</v>
            </c>
        </row>
        <row r="4" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="A4" s="2" t="s">
                <v>3</v>
            </c>
        </row>
        <row r="5" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="A5" s="3" t="s">
                <v>4</v>
            </c>
            <c r="B5" s="3"/>
        </row>
        <row r="8" s="5" customFormat="true" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="A8" s="4" t="n">
                <v>1</v>
            </c>
            <c r="B8" s="4" t="s">
                <v>5</v>
            </c>
        </row>
        <row r="9" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B9" s="6" t="s">
                <v>6</v>
            </c>
            <c r="C9" s="6" t="s">
                <v>7</v>
            </c>
            <c r="D9" s="6" t="s">
                <v>8</v>
            </c>
            <c r="E9" s="6" t="s">
                <v>9</v>
            </c>
            <c r="F9" s="6" t="s">
                <v>10</v>
            </c>
            <c r="G9" s="6" t="s">
                <v>11</v>
            </c>
        </row>
        <row r="10" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B10" s="6" t="s">
                <v>12</v>
            </c>
            <c r="C10" s="6" t="s">
                <v>13</v>
            </c>
            <c r="D10" s="6" t="s">
                <v>14</v>
            </c>
            <c r="E10" s="6" t="s">
                <v>15</v>
            </c>
            <c r="F10" s="6" t="s">
                <v>16</v>
            </c>
            <c r="G10" s="6" t="s">
                <v>17</v>
            </c>
        </row>
        <row r="11" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B11" s="7" t="s">
                <v>18</v>
            </c>
            <c r="C11" s="7" t="s">
                <v>19</v>
            </c>
            <c r="D11" s="8" t="n">
                <v>44927</v>
            </c>
            <c r="E11" s="8" t="n">
                <v>44927</v>
            </c>
            <c r="F11" s="7" t="s">
                <v>20</v>
            </c>
            <c r="G11" s="7" t="s">
                <v>21</v>
            </c>
        </row>
        <row r="13" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B13" s="9" t="s">
                <v>22</v>
            </c>
        </row>
        <row r="14" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="E14" s="6" t="s">
                <v>23</v>
            </c>
            <c r="F14" s="6"/>
        </row>
        <row r="15" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B15" s="6" t="s">
                <v>6</v>
            </c>
            <c r="C15" s="6" t="s">
                <v>24</v>
            </c>
            <c r="D15" s="6" t="s">
                <v>25</v>
            </c>
            <c r="E15" s="6" t="s">
                <v>26</v>
            </c>
            <c r="F15" s="6" t="s">
                <v>27</v>
            </c>
            <c r="G15" s="6" t="s">
                <v>28</v>
            </c>
            <c r="H15" s="6" t="s">
                <v>29</v>
            </c>
            <c r="I15" s="6" t="s">
                <v>30</v>
            </c>
        </row>
        <row r="16" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B16" s="6" t="s">
                <v>31</v>
            </c>
            <c r="C16" s="6" t="s">
                <v>32</v>
            </c>
            <c r="D16" s="6" t="s">
                <v>33</v>
            </c>
            <c r="E16" s="6" t="s">
                <v>34</v>
            </c>
            <c r="F16" s="6" t="s">
                <v>35</v>
            </c>
            <c r="G16" s="6" t="s">
                <v>36</v>
            </c>
            <c r="H16" s="6" t="s">
                <v>37</v>
            </c>
            <c r="I16" s="6" t="s">
                <v>38</v>
            </c>
        </row>
        <row r="17" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B17" s="7" t="s">
                <v>18</v>
            </c>
            <c r="C17" s="7" t="s">
                <v>39</v>
            </c>
            <c r="D17" s="7" t="s">
                <v>40</v>
            </c>
            <c r="E17" s="7" t="n">
                <v>35.09</v>
            </c>
            <c r="G17" s="7" t="s">
                <v>41</v>
            </c>
            <c r="H17" s="7" t="s">
                <v>42</v>
            </c>
            <c r="I17" s="7" t="s">
                <v>43</v>
            </c>
        </row>
        <row r="18" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B18" s="7" t="s">
                <v>18</v>
            </c>
            <c r="C18" s="7" t="s">
                <v>44</v>
            </c>
            <c r="D18" s="7" t="s">
                <v>40</v>
            </c>
            <c r="E18" s="7" t="n">
                <v>7.02</v>
            </c>
            <c r="G18" s="7" t="s">
                <v>41</v>
            </c>
            <c r="H18" s="7" t="s">
                <v>42</v>
            </c>
            <c r="I18" s="7" t="s">
                <v>43</v>
            </c>
        </row>
        <row r="19" customFormat="false" ht="12.8" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
            <c r="B19" s="7" t="s">
                <v>18</v>
            </c>
            <c r="C19" s="7" t="s">
                <v>45</v>
            </c>
            <c r="D19" s="7" t="s">
                <v>40</v>
            </c>
            <c r="F19" s="7" t="n">
                <v>42.11</v>
            </c>
            <c r="G19" s="7" t="s">
                <v>41</v>
            </c>
            <c r="H19" s="7" t="s">
                <v>42</v>
            </c>
            <c r="I19" s="7" t="s">
                <v>43</v>
            </c>
        </row>
    </sheetData>
    <mergeCells count="1">
        <mergeCell ref="E14:F14"/>
    </mergeCells>
    <printOptions headings="false" gridLines="false" gridLinesSet="true" horizontalCentered="false" verticalCentered="false"/>
    <pageMargins left="0.747916666666667" right="0.747916666666667" top="0.984027777777778" bottom="0.984027777777778" header="0.511811023622047" footer="0.511811023622047"/>
    <pageSetup paperSize="1" scale="100" fitToWidth="1" fitToHeight="1" pageOrder="downThenOver" orientation="portrait" blackAndWhite="false" draft="false" cellComments="none" horizontalDpi="300" verticalDpi="300" copies="1"/>
    <headerFooter differentFirst="false" differentOddEven="false">
        <oddHeader></oddHeader>
        <oddFooter></oddFooter>
    </headerFooter>
</worksheet>

I was wondering if you had any idea about the difference provided when Libre Office has saved the original file to copy 🤔.
I mean there are changes, but it's still "kinda" the same thing but different enough that SAP can accept the file 🤔

Would like to avoid resaving the file via Libre / MS Office to be able to push those files to SAP.

Any idea / hint?

Protection of sheets

Hi @salvois,
thanks for the great library, its actually working really great in some of my testing.

I know this library will not have all the features in favor of performance and I'm happy about that ^^
The main feature I'm missing right now would be protecting an excel sheet with a password. Do you know if that would be possible somehow?

Thanks
Michael

Create File using MemoryStream

Hi,

i'm trying to create a huge xlsx (308K rows) with your library; all of your documentation use FileStream but for our case we need to use a memorystream to save the output to our MongoGridFs

            using var stream = new MemoryStream();
            {
                using var xlsxWriter = new LargeXlsx.XlsxWriter(stream);
                {
                            CreateLargeSheetByType(xlsxWriter, type, data);
                }
                file = new OutputFileItem
                {
                    FileName = $"{fileNamePrefix} - {type.Description()}.xlsx",
                    Stream = stream.ToArray()
                };
                return _filePersistorService.StoreOutputFile(file);
            }

this code create the file but excel report that format or extension are not valid

Am I missing something? It is possible to use your library this way

thanks
Maurizio

Not possible to recover files with Excel v. 2110

Hi @salvois
Your library worked great with older excel version, but today I updated it and right now I can't open any of the xlsx files created with LargeXlsx. When trying the option "Open and repair" I'm getting "The file is corrupt and cannot be opened" error. Could take a look at this?

Excel:
Microsoft® Excel® for Microsoft 365 MSO (Version 2110 Build 16.0.14527.20270) 64-bit

.Net

dotnet --info   
.NET SDK (reflecting any global.json):
 Version:   5.0.402
 Commit:    e9d3381880

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.19043
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\5.0.402\

Host (useful for support):
  Version: 5.0.11
  Commit:  f431858f8b

.NET SDKs installed:
  5.0.402 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 5.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 5.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 5.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Automatic column width adjustment

Hi! Are there any plans regarding the implementation of an automatic column width adjustment?
I'm talking about something similar to AutoFitColumns in EPPlus.
I understand that the way this package is designed requires user to manually provide column width in BeginWorksheet method call. However, described feature seems rather handy.
If, by any chance, you have an idea how to implement it, it would be really great.

Generate Excel Worksheet from HTML

Hi!

It would be convenient if it was possible to convert HTML to EXCEL.
The first priority is to add import of HTML tables with support for embedded styles, and in the future it is possible to add support for style sheets as well.

I think it would be a very useful feature to have.
What do you think about it? Will you consider this idea in the near future?

Thanks.

RTL worksheet ?

Hi ,
Thank you for sharing this library.
Is it possible to change the worksheet reading order to rtl ?
also, another question off topic , I think the files generated with this library are considerably bigger than they would if they'd be generated with OpenXML (?), right now I have 400K~ records at about 10MB , while OpenXML is around 2.5MB.

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.