I have various tables generated in a Mathematica application and need to export this to MSExcel
formatted in a specific way.
The Excel
formatting has to be generated by Mathematica. I am not familiar with .Net
(or .NetLink
), but after searching, found this very useful code by Chris Degnan.
Needs["NETLink`"]
PutIntoExcel[data_List, cell_String, file_String] :=
Module[{rows, cols, excel, workbook, worksheet, srcRange},
{rows, cols} = Dimensions[data];
NetBlock[
InstallNET[];
excel = CreateCOMObject["Excel.Application"];
If[! NETObjectQ[excel], Return[$Failed],
excel[Visible] = True;
workbook = excel@Workbooks@Add[];
worksheet = workbook@Worksheets@Item[1];
srcRange = worksheet@Range[cell]@Resize[rows, cols];
srcRange@Value = data;
srcRange@Interior@Color = 13959039;
(* OLE colours from http://www.endprod.com/colors/ *)
worksheet@Range["E5:F5"]@Font@Bold = True;
worksheet@Range["E5:F5"]@Interior@Color = 61166;
worksheet@Range["E6:E9"]@Font@Color = 255;
(* Reset the numeric values to get the correct type *)
worksheet@Range["E6:E9"]@Value = Rest[data[[All, 1]]];
workbook@SaveAs[file];
workbook@Close[False];
excel@Quit[];
]];
LoadNETType["System.GC"];
GC`Collect[]];
data = {{"Year", "Cartoon"}, {1928, "Mickey Mouse"}, {1934,
"Donald Duck"}, {1940, "Bugs Bunny"}, {1949, "Road Runner"}};
outputfile = "C:\\Temp\\demo.xlsx";
Quiet[DeleteFile[outputfile]];
PutIntoExcel[data, "E5", outputfile];
Print[Panel[TableForm[data, TableSpacing -> {2, 4}]]];
This explains in detail how to format colours, but I run into problems with borders.
This code does work:
worksheet@Range["B3:C4"]@Borders@Color = 255;
However, specifying specific parts of the border does not:
worksheet@Range["B3:C4"]@Borders[xlDiagonalDown]@Color = 255;
and I get this error:
NET::nocomprop: No property named xlDiagonalDown exists for the given COM object.
Specifying the weight of the line like this:
worksheet@Range["B3:C4"]@Borders@Weight = xlThick;
gives a different error:
NET::methodargs: Improper arguments supplied for method named Weight.
Can anyone suggest what may be wrong?
Then after exporting a fancy formatted table to Excel
, I need to export an Excel
formula into the formatted cells, to enable the Excel
user to modify and play with their own input data.
"A .NET exception occurred: \ "System.Reflection.TargetInvocationException: Exception has been \ thrown by the target of an invocation. ---> \ System.Runtime.InteropServices.COMException: Microsoft Excel cannot \ access the file 'C:\\ Temp \\ 534E8A50'. There are several possible \ reasons:"
$\endgroup$