poi-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ken Hausam <kah_12...@yahoo.com.INVALID>
Subject Re: Change chart type programmatically?
Date Sun, 17 Jan 2016 20:40:54 GMT
I came up with some code that works for my purposes. See below. The two replace lines are the
significant code. The rest is plumbing. Thanks for all your help.
        ZipInputStream zis = new ZipInputStream(new FileInputStream(args[0]));
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(args[0] + ".new.xlsx"));

        try {
            ZipEntry entry;
            while((entry = zis.getNextEntry())!=null) {               

                
                zos.putNextEntry(new ZipEntry(entry.getName()));
                if(entry.getName().equals("xl/charts/chart1.xml")) {
                    StringWriter swriter = new StringWriter();
                    IOUtils.copy(zis, swriter);
                    String chartXml = swriter.toString();
                    
                    chartXml = chartXml.replace("<c:lineChart>",
"<c:barChart><c:barDir val=\"col\"/><c:grouping val=\"stacked\"/>");
                    chartXml = chartXml.replace("</c:lineChart>",
"<c:gapWidth val=\"150\"/><c:overlap val=\"100\"/></c:barChart>");
                    
                    StringReader sreader = new StringReader(chartXml);                                       

                    IOUtils.copy(sreader, zos);                   

                }
                else {
                    IOUtils.copy(zis, zos);
                }
                zos.closeEntry();
            }
        }
        finally {
            zis.close();
            zos.close();
        }





 

    On Friday, January 15, 2016 2:54 PM, Dominik Stadler <dominik.stadler@gmx.at> wrote:
 

 Hi,

Sounds nice!

Java-Dev-code usually resides in src/java/o.a.p.dev, but as your stuff it
is written in Python, it would probably make sense to put it under
"contrib/python" for now to not add more confusion to the list of
directories under /src directly.

Dominik.

On Fri, Jan 15, 2016 at 5:10 PM, Javen O'Neal <javenoneal@gmail.com> wrote:

> I wrote some python code that accepts two OOXML files, unzips them
> (zipfile), compares the zip structures, then compares file contents for
> matching files (difflib), then outputs the diff.
>
> Would this be helpful to the POI project, and where would I commit it?
> On Jan 15, 2016 3:58 AM, "Dominik Stadler" <dominik.stadler@gmx.at> wrote:
>
> > FYI, we also have a helper application OOXMLPrettyPrint as part of the
> POI
> > source code which will take a .xlsx/.docx/.pptx/... file and produce a
> > pretty-printed one (which as Dave stated might not have exactly the same
> > content any more!). If you run this on both files you can then better
> > compare these. Best if you combine this with a compare tool that can be
> > made aware that these files are actually ZIPs and allows to do in-ZIP
> > comparisons...
> >
> > Dominik.
> >
> > On Fri, Jan 15, 2016 at 9:27 AM, David Law <david.law@apconsult.de>
> wrote:
> >
> > > Please note: this may be ok for a comparison, but...
> > > XML DOES NOT NORMALLY CONTAIN NEWLINES
> > > They result in spurious Text nodes.
> > > (which most products simply ignore because they are so common)
> > >
> > > Javen O'Neals suggestion to convert to canonical is a much better idea.
> > >
> > > Workaround: a  newline BEFORE the tag-closing '>' (and '/>' ):
> > > <html
> > >    ><body bgcolor="#ffff00"
> > >        ><h1>Hello world!</h1
> > >        ><p
> > >            ><a href="https://poi.apache.org/">XML does not (normally)
> > > contain newlines</a
> > >        ></p
> > >        ><img src="Logo.png" alt="Smiley face" border="1"
> > >    /></body
> > > ></html>
> > >
> > > P.S. the above is valid XML but NOT Valid XHTML :-)
> > >
> > > All the best,
> > > DaveLaw
> > >
> > >
> > > On 15/01/2016 04:50, Javen O'Neal wrote:
> > >
> > >> Find-replace all ">" with ">\n", then run the diff. Alternatively,
> use a
> > >> text editor with HTML/XML pretty printing.
> > >> On Jan 14, 2016 19:40, "Ken Hausam" <kah_12831@yahoo.com.invalid>
> > wrote:
> > >>
> > >> Thanks Nick. I'm a novice here. Didn't even know that .xlsx were zips
> of
> > >>> XML files.
> > >>>
> > >>> After changing chart type, only one file changed: the chart1.xml file
> > >>> location in the xl/charts/ directory. I've attached the before
> > (line.xml)
> > >>> and after (stackedbar.xml) files. The diff isn't enormous, but it
> > doesn't
> > >>> seem trivial either. I couldn't list the actual diff since the XML
is
> > all
> > >>> on one line which makes the diff hard to view as a text diff.
> > >>>
> > >>> I already tried a very simple change: changing <c:lineChart>
to
> > >>> <c:barChart> and changing <c:grouping val="standard"/>
to <c:grouping
> > >>> val="stacked"/> . No luck. Excel complained with "file format is
not
> > >>> valid"
> > >>> when I tried to open it.
> > >>>
> > >>> Don't know if it makes a difference, but I was using Mac Excel 2011
> to
> > >>> change the chart type.
> > >>>
> > >>> Thanks,
> > >>> Ken
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> On Wednesday, January 13, 2016 2:47 AM, Nick Burch <
> > apache@gagravarr.org
> > >>> >
> > >>> wrote:
> > >>>
> > >>>
> > >>> On Sat, 9 Jan 2016, Ken Hausam wrote:
> > >>>
> > >>> I am using XSSFChart and associated classes to create a line chart
> > using
> > >>>> Apache POI. Works great! Thanks. My question is, is there an easy
> way
> > to
> > >>>> change the chart type programmatically from a line chart to a
> stacked
> > >>>> bar chart? I looked quickly at the CTChart class and associated
CT
> > >>>> classes and noticed that the various chart types had their own
> class.
> > >>>> This makes me think that it's not as easy as just flipping a chart
> > type
> > >>>> attribute somewhere, but figured it couldn't hurt to ask.
> > >>>>
> > >>>
> > >>> I haven't looked at the chart stuff recently, so I can't answer off
> the
> > >>> top of my head. What I'd suggest you do is firstly create a simple
> file
> > >>> in
> > >>> Excel, with one sheet, with a few data points, and one style of
> chart.
> > >>> Save that. Next, change the type, and save-as that. Next, unzip both
> > >>> .xlsx
> > >>> files (rename to .zip and unpack). Now, compare the xml, especially
> for
> > >>> sheets and charts, and see what differs. Post a summary of that, and
> > >>> we'll
> > >>> help if we can!
> > >>>
> > >>> Nick
> > >>>
> > >>> ---------------------------------------------------------------------
> > >>> To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
> > >>> For additional commands, e-mail: user-help@poi.apache.org
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> ---------------------------------------------------------------------
> > >>> To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
> > >>> For additional commands, e-mail: user-help@poi.apache.org
> > >>>
> > >>>
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
> > > For additional commands, e-mail: user-help@poi.apache.org
> > >
> > >
> >
>


  
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message