LoginSignup
0
1

More than 1 year has passed since last update.

Bridge xlsxファイル作成

Last updated at Posted at 2023-02-01

Bridgeでxlsxファイルを作成する(win)メモ

// I am not responsible for any problems caused by using this script.
#target "Bridge"
// cell data
var myCell = {
    A: { 1: "test", 2: "test2" },
    B: { 1: 1, 2: 10}
}
{ // XML creation for Excel
    var mySharedStringsXML = new XML("""<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
</sst>""");
    var mySheetDataXML = new XML("""<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
    <sheetData></sheetData>
</worksheet>""");
    for (var myProperty in myCell) {
        for (var myProperty2 in myCell[myProperty]) {
            // row element
            if (mySheetDataXML.*::sheetData.*::row.(@r == myProperty2).length() == 0) {
                mySheetDataXML.*::sheetData.insertChildBefore(null, new XML("<row r='" + myProperty2 + "' />"));
            }
            { // c element
                if (isNaN(myCell[myProperty][myProperty2])) {
                    var myT = "s";
                    var myVElementValue = mySharedStringsXML.*::si.length();
                } else {
                    var myT = "n";
                    var myVElementValue = myCell[myProperty][myProperty2];
                }
                mySheetDataXML.*::sheetData.*::row.(@r == myProperty2)
                .insertChildBefore(null, new XML("<c r='" + myProperty + myProperty2 + "' t='" + myT + "'><v>" + myVElementValue + "</v></c>"));
                // sharedStrings
                mySharedStringsXML.insertChildBefore(null, new XML("<si><t>" + myCell[myProperty][myProperty2] + "</t></si>"));
            }
        }
    }
    var myTemporaryFolder = new Folder(Folder.desktop + "/ExcelTemporaryFolder");
    myTemporaryFolder.create();
    var myFile = new File(myTemporaryFolder.fsName + "/[Content_Types].xml");
    if  (myFile) {
        myFile.open("w");
        myFile.encoding = "utf-8";
        myFile.writeln("""<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
    <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
    <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
    <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
    <Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
</Types>""");
        myFile.close();
    }
    (new Folder(myTemporaryFolder.fsName + "/_rels")).create();
    myFile = new File(myTemporaryFolder.fsName + "/_rels/.rels");
    if  (myFile) {
        myFile.open("w");
        myFile.encoding = "utf-8";
        myFile.writeln("""<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
    <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
</Relationships>""");
        myFile.close();
    }
    (new Folder(myTemporaryFolder.fsName + "/xl")).create();
    myFile = new File(myTemporaryFolder.fsName + "/xl/sharedStrings.xml");
    if  (myFile) {
        myFile.open("w");
        myFile.encoding = "utf-8";
        myFile.writeln('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + mySharedStringsXML.toXMLString());
        myFile.close();
    }
    myFile = new File(myTemporaryFolder.fsName + "/xl/workbook.xml");
    if  (myFile) {
        myFile.open("w");
        myFile.encoding = "utf-8";
        myFile.writeln("""<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
    <sheets>
        <sheet name="mySheet" sheetId="1" r:id="rId1"/>
    </sheets>
</workbook>""");
        myFile.close();
    }
    (new Folder(myTemporaryFolder.fsName + "/xl/_rels")).create();
    myFile = new File(myTemporaryFolder.fsName + "/xl/_rels/workbook.xml.rels");
    if  (myFile) {
        myFile.open("w");
        myFile.encoding = "utf-8";
        myFile.writeln("""<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
    <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
    <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>
</Relationships>""");
        myFile.close();
    }

    (new Folder(myTemporaryFolder.fsName + "/xl/worksheets")).create();
    myFile = new File(myTemporaryFolder.fsName + "/xl/worksheets/sheet1.xml");
    if  (myFile) {
        myFile.open("w");
        myFile.encoding = "utf-8";
        myFile.writeln('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + mySheetDataXML);
        myFile.close();
    }
}
{ // zip compression
    { // Invoke PowerShell from Command Prompt
        app.system('powershell -Command "Compress-Archive'
            + ' -Path ' + (new File(Folder.desktop)).fsName + '/ExcelTemporaryFolder/*'
            + ' -DestinationPath ' + (new File(Folder.desktop)).fsName + '/myExcelTemporaryFile.zip'
            + ' -Force"');
    }
    for (var i = 0; i <= 10; i++) {
        if ((new File(Folder.desktop + "/myExcelTemporaryFile.zip")).exists) { break; }
        $.sleep(1000);
    }
}
{ // rename
    if ((new File(Folder.desktop + "/myExcel.xlsx")).exists) {
        (new File(Folder.desktop + "/myExcel.xlsx")).remove();
    }
    if ((new File(Folder.desktop + "/myExcel.xlsx")).exists) {
         (new File(Folder.desktop + "/myExcelTemporaryFile.zip")).remove();
         alert("It seems that the xlsx file is open.");
    } else {
        (new File(Folder.desktop + "/myExcelTemporaryFile.zip")).rename("myExcel.xlsx");
        alert("An xlsx file and a ExcelTemporaryFolder were created on the desktop.");
    }
}
/*
{ // delete TemporaryFolder
    (myFunction = function() {
        var myTargetFileAndFolderArray = arguments[0].getFiles();
        for (var i = myTargetFileAndFolderArray.length - 1; i >= 0; i--) {
            if (myTargetFileAndFolderArray[i].constructor.name == "File") {
                myTargetFileAndFolderArray[i].remove();
            } else if (myTargetFileAndFolderArray[i].constructor.name == "Folder") {
                myFunction(myTargetFileAndFolderArray[i]);
            }
        }
        arguments[0].remove();
    })(myTemporaryFolder);
}
*/
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1