Git Product home page Git Product logo

dashtable's People

Contributors

doakey3 avatar gustavklopp avatar lowks avatar neutralinsomniac avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

dashtable's Issues

skew table

Input table

<table border=1>
  <caption>A test table witd merged cells</caption>
  <tr>
  <td>Name</td>
  <td>Height</td>
  <td>Weight</td>
  <td>Jobs</td>
  <td>Hobby</td>
  </tr>
  <tr>
  <td>Jack</td>
  <td colspan=2 rowspan=2>
Undisclosed
foo
bar
  </td>
  <td>graphist</td>
  <td>gardener</td>
  </tr>
  <tr>
  <td>Frank</td>
  <td>developer</td>
  <td>painter</td>
  </tr>
  <tr>
  <td>Jenny </td>
  <td>1.6m</td>
  <td>52Kg</td>
  <td>commercial</td>
  <td>jogger</td>
  </tr>
</table>

Output

+-----+------------+------+----------+--------+
|Name |Height      |Weight|Jobs      |Hobby   |
+-------------------+-----------+------+----------+--------+
|Jack               |Undisclosed|graphist  |gardener|
+-----+           +----------+--------+
|Frank|foo                |developer |painter |
+-----+------------+------+----------+--------+
|Jenny|1.6mbar     |52Kg  |commercial|jogger  |
+-----+------------+------+----------+--------+

Python 2 compatibility

Nice module! I think this is very nearly compatible with python 2. It would just take adding

from __future__ import print_function, division

as the first import in the appropriate places. I had an error crop up when running in python 2 where a float was returned where an int was required (in dashutils/center_line.py). Works great in python 3, but would be a nice feature to make it backward compatible.

[Feature] span more than consecutive cells

Thanks for this great library, is the only one I found to print tables allowing spans, a great addon for complex .rst tables.

I would like the ability to make spans that can be bigger than two consecutive cells.
Right now when I try that I'm getting ERROR: This span is not valid:

They actually don't break the rule of being a rectangular shape, so I was expecting it would just work.

A minimal example:

import dashtable

spans = [
    [ [1, 0], [3, 0] ]
]
table = [
    ["Header 1", "Header 2", "Header 3"],
    ["row header", "Data1", "Data2"],
    ["", "Data3", "Data4"],
    ["", "Data5", "Data6"],
    ["row header2", "Data7", "Data8"],
]

print(dashtable.data2rst(table, spans))

I would like to obtain as output:

+-------------+----------+----------+
| Header 1    | Header 2 | Header 3 |
+=============+==========+==========+
| row header  | Data1    | Data2    |
|             +----------+----------+
|             | Data3    | Data4    |
|             +----------+----------+
|             | Data5    | Data6    |
+-------------+----------+----------+
| row header2 | Data7    | Data8    |
+-------------+----------+----------+

Do you think is possible to implement?

thanks for considering

Cast Numbers to Strings

dashtable.data2rst.TableContentError: Table must be a list of lists of strings

There may be a technical reason why, but it seems like forcing the input to be strings only could be avoided if numbers were cast using str().

That is what I do in my code to "fix" this error.

Thanks for considering the improvement!

Empty <td> not allowed

<table>
<tr>
  <td>foo</td>
  <td></td>
</tr>
</table>
+-+-+
|a| |
+-+-+
or
+-++
|a||
+-++

Unicode Characters and Text Alignment

Not sure if it is something I am doing wrong, but I've noticed that accented characters seem to throw off the spacing.

+-----+------------------------+-------+
| ID  | Name                   | Email |
+=====+========================+=======+
| x6  | Hervé de Miremont     |       |
+-----+------------------------+-------+
| x9  | Gilles Sansac          |       |
+-----+------------------------+-------+
| x1  | André Monluc          |       |
+-----+------------------------+-------+
| x8  | Claude Ambleville      |       |
+-----+------------------------+-------+
| x2  | Jean de Sisieulx       |       |
+-----+------------------------+-------+
| x10 | André de Boutteville  |       |
+-----+------------------------+-------+
| x3  | Antonie de Veniers     |       |
+-----+------------------------+-------+
| x4  | Jean-Louis de Clermont |       |
+-----+------------------------+-------+
| x5  | André de Bouillon     |       |
+-----+------------------------+-------+
| x7  | Jacques de Sarzay      |       |
+-----+------------------------+-------+

The names are stored in a json file and loaded json.load().

        "id": "x10",
        "name": "Andr\u00c3\u00a9 de Boutteville",

Thank you.

Problem with HTML input.

Try attached HTML, it is exported from an e-mail generated by MS Office.
Only the column titles and 2/3 of the first row get printed, the rest is empty cells.

from dashtable import html2rst
filepath = "number.html"
print(html2rst(filepath, force_headers=False))

number.html.zip

Problem with (bootstrap) html table

I tested the lib using a sample table from the bootstrap website. For some reason the first and last characters of each cell are missing?

Any idea?

<table class="table">
    <caption>
        Optional table caption.
    </caption>
    <thead>
        <tr>
            <th>#</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Username</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <th scope="row">1</th>
            <td>Mark</td>
            <td>Otto</td>
            <td>@mdo</td>
        </tr>
        <tr>
            <th scope="row">2</th>
            <td>Jacob</td>
            <td>Thornton</td>
            <td>@fat</td>
        </tr>
        <tr>
            <th scope="row">3</th>
            <td>Larry</td>
            <td>the Bird</td>
            <td>@twitter</td>
        </tr>
    </tbody>
</table>
html2rst(s,force_headers=False)

+---+---------+--------+-------+
| | rst Nam | st Nam | ernam |
+===+=========+========+=======+
| | | | |
+---+---------+--------+-------+
| | | | |
+---+---------+--------+-------+
| | | | |
+---+---------+--------+-------+'

spans is required for data2rst

I upgraded from 1.3.4 to 1.4.4 and I noticed all calls to data2rst() were now causing errors.

ERROR: Spans must be a [Row, Column] pair of integers

Doing a little research, it appears that the 'spans' parameter is now required, though it seems to have a default internally. Adding spans=[] fixes the issue and allows the table to render.

Sample code using Python 3.6.5 and dashtable 1.4.4:

import dashtable

table = [["H1", "H2", "H3", "H4", "H5"]]

table.append(["1", "2", "3", "4", "5"])
table.append(["1", "2", "3", "4", "5"])

print(dashtable.data2rst(table))
print(dashtable.data2rst(table, spans=[]))

Output:

ERROR: Spans must be a [Row, Column] pair of integers
+----+----+----+----+----+
| H1 | H2 | H3 | H4 | H5 |
+====+====+====+====+====+
| 1  | 2  | 3  | 4  | 5  |
+----+----+----+----+----+
| 1  | 2  | 3  | 4  | 5  |
+----+----+----+----+----+

I didn't see any sign this was intentional, and the docs still indicate it is optional.

table (list of lists of str) –
spans (list of lists of lists of int, optional) –

http://dashtable.readthedocs.io/en/latest/Code.html#dashtable.data2rst

coloured text breaks alignment

Using any colors, either via colorit, click.style or even via term escape sequences directly, in the cell text will break alignment of the cell.

html2rst/htm2md and complex table

Hi

Thank you for this great tool.

I tried to use the html2rst/htm2md functions but I think I met an issue.

I have got an html table which looks like this

image

        <style type="text/css">
        table {vertical-align: middle;margin: 0 auto;font-size:12px;color:#333333;width:100%;border-width: 1px;border-color: #729ea5;border-collapse: collapse;}
        table th {font-size:12px;background-color:#acc8cc;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;text-align:left;}
        table tr {background-color:#ffffff;}
        table td {font-size:12px;border-width: 1px;padding: 0px;border-style: solid;border-color: #729ea5;}
        </style>
        <table>
<tr><td rowspan="16">Jasmin (M, 2018)</td><td rowspan="8">Tassou (M, 2020)</td><td rowspan="4">Bastidon (M, 2017)</td><td rowspan="2">Kappa (M, 2017)</td><td rowspan="1">Savary (M, 2015)</td></tr>
<tr><td rowspan="1">Rolex (F, 2012)</td></tr>
<tr><td rowspan="2"><b>Coquine (F, 2021)</b></td><td rowspan="1">Jérico (M, 2012)</td></tr>
<tr><td rowspan="1">Apostrophe (F, 2020)</td></tr>
<tr><td rowspan="4">Danette (F, 2013)</td><td rowspan="2">Magritt (M, 2019)</td><td rowspan="1">Sarcouf (M, 2013)</td></tr>
<tr><td rowspan="1">Joufflu (F, 2012)</td></tr>
<tr><td rowspan="2">Xio (F, 2020)</td><td rowspan="1">Caleu (M, 2017)</td></tr>
<tr><td rowspan="1">Sirène (F, 2013)</td></tr>
<tr><td rowspan="8">Epinette (F, 2020)</td><td rowspan="4">Beaulinge (M, 2015)</td><td rowspan="2">Ramsès (M, 2019)</td><td rowspan="1">Eigouzo (M, 2015)</td></tr>
<tr><td rowspan="1">Yoshi (F, 2015)</td></tr>
<tr><td rowspan="2">Chiper (F, 2013)</td><td rowspan="1">Gastounet (M, 2020)</td></tr>
<tr><td rowspan="1">Trampoline (F, 2012)</td></tr>
<tr><td rowspan="4">Garance (F, 2018)</td><td rowspan="2">Octave  (M, 2018)</td><td rowspan="1">Benvengu (M, 2020)</td></tr>
<tr><td rowspan="1">Prune (F, 2017)</td></tr>
<tr><td rowspan="2">Eve (F, 2014)</td><td rowspan="1">Youka (M, 2012)</td></tr>
<tr><td rowspan="1">Kalamity (F, 2020)</td></tr>
<tr><td rowspan="16">Etoile (F, 2011)</td><td rowspan="8">Sauron (M, 2021)</td><td rowspan="4">QuoVadis (M, 2020)</td><td rowspan="2">Hélico (M, 2011)</td><td rowspan="1">Arlesien (M, 2020)</td></tr>
<tr><td rowspan="1">Kalmie (F, 2016)</td></tr>
<tr><td rowspan="2">Lumière (F, 2010)</td><td rowspan="1">Talleyran (M, 2021)</td></tr>
<tr><td rowspan="1"><b>Coquine (F, 2021)</b></td></tr>
<tr><td rowspan="4">Soupolait (F, 2019)</td><td rowspan="2">Darius (M, 2010)</td><td rowspan="1">Camai_2 (M, 2013)</td></tr>
<tr><td rowspan="1">Rutabaga (F, 2020)</td></tr>
<tr><td rowspan="2">Ursulita (F, 2021)</td><td rowspan="1">Papagai (M, 2019)</td></tr>
<tr><td rowspan="1">Biloute (F, 2010)</td></tr>
<tr><td rowspan="8">Choupette (F, 2021)</td><td rowspan="4">Faucon (M, 2012)</td><td rowspan="2">Felin (M, 2012)</td><td rowspan="1">Papagai (M, 2019)</td></tr>
<tr><td rowspan="1">Caxixi (F, 2014)</td></tr>
<tr><td rowspan="2">Caroline (F, 2011)</td><td rowspan="1">Hussard (M, 2014)</td></tr>
<tr><td rowspan="1">Stich (F, 2015)</td></tr>
<tr><td rowspan="4">Anis (F, 2014)</td><td rowspan="2">Bariton (M, 2013)</td><td rowspan="1">Raimu (M, 2018)</td></tr>
<tr><td rowspan="1">Coach (F, 2011)</td></tr>
<tr><td rowspan="2">Salopette (F, 2018)</td><td rowspan="1">Liquis (M, 2020)</td></tr>
<tr><td rowspan="1">Rutabaga (F, 2020)</td></tr>
</table>

and I tried to convert it to rst and I have this result
We can see that rowspan are not correct

>>> print(dashtable.html2rst(an.pedigree("html")))
+------------------+---------------------+---------------------+-----------------------+-----------------------+
| Jasmin (M, 2018) | Tassou (M, 2020)    | Bastidon (M, 2017)  | Kappa (M, 2017)       | Savary (M, 2015)      |
|                  |                     |                     |                       +-----------------------+
|                  |                     |                     |                       | Rolex (F, 2012)       |
|                  |                     |                     +-----------------------+-----------------------+
|                  |                     |                     | **Coquine (F, 2021)** | Jérico (M, 2012)      |
|                  |                     |                     +-----------------------+-----------------------+
|                  |                     |                     |                       | Apostrophe (F, 2020)  |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     | Danette (F, 2013)   | Magritt (M, 2019)     | Sarcouf (M, 2013)     |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Joufflu (F, 2012)     |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     | Xio (F, 2020)         | Caleu (M, 2017)       |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Sirène (F, 2013)      |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  | Epinette (F, 2020)  | Beaulinge (M, 2015) | Ramsès (M, 2019)      | Eigouzo (M, 2015)     |
|                  |                     |                     +-----------------------+-----------------------+
|                  |                     |                     |                       | Yoshi (F, 2015)       |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     | Chiper (F, 2013)      | Gastounet (M, 2020)   |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Trampoline (F, 2012)  |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  |                     | Garance (F, 2018)   | Octave  (M, 2018)     | Benvengu (M, 2020)    |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Prune (F, 2017)       |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  |                     |                     | Eve (F, 2014)         | Youka (M, 2012)       |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Kalamity (F, 2020)    |
+------------------+---------------------+---------------------+-----------------------+-----------------------+
| Etoile (F, 2011) | Sauron (M, 2021)    | QuoVadis (M, 2020)  | Hélico (M, 2011)      | Arlesien (M, 2020)    |
|                  |                     |                     |                       +-----------------------+
|                  |                     |                     |                       | Kalmie (F, 2016)      |
|                  |                     |                     +-----------------------+-----------------------+
|                  |                     |                     | Lumière (F, 2010)     | Talleyran (M, 2021)   |
|                  |                     |                     +-----------------------+-----------------------+
|                  |                     |                     |                       | **Coquine (F, 2021)** |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     | Soupolait (F, 2019) | Darius (M, 2010)      | Camai_2 (M, 2013)     |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Rutabaga (F, 2020)    |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     | Ursulita (F, 2021)    | Papagai (M, 2019)     |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Biloute (F, 2010)     |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  | Choupette (F, 2021) | Faucon (M, 2012)    | Felin (M, 2012)       | Papagai (M, 2019)     |
|                  |                     |                     +-----------------------+-----------------------+
|                  |                     |                     |                       | Caxixi (F, 2014)      |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     | Caroline (F, 2011)    | Hussard (M, 2014)     |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Stich (F, 2015)       |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  |                     | Anis (F, 2014)      | Bariton (M, 2013)     | Raimu (M, 2018)       |
|                  |                     +---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Coach (F, 2011)       |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  |                     |                     | Salopette (F, 2018)   | Liquis (M, 2020)      |
|                  +---------------------+---------------------+-----------------------+-----------------------+
|                  |                     |                     |                       | Rutabaga (F, 2020)    |
+------------------+---------------------+---------------------+-----------------------+-----------------------+

the result with htm2md looks like this
rowspan does not seem to be correct, and html2md should not add a header (is it mandatory ?)

>>> print(dashtable.html2md(an.pedigree("html")))
| Jasmin (M, 2018) |  Tassou (M, 2020)   | Bastidon (M, 2017)  |    Kappa (M, 2017)    |   Savary (M, 2015)    |
|------------------|---------------------|---------------------|-----------------------|-----------------------|
|                  |                     |                     |                       |    Rolex (F, 2012)    |
|                  |                     |                     | **Coquine (F, 2021)** |   Jérico (M, 2012)    |
|                  |                     |                     |                       | Apostrophe (F, 2020)  |
|                  |                     |  Danette (F, 2013)  |   Magritt (M, 2019)   |   Sarcouf (M, 2013)   |
|                  |                     |                     |                       |   Joufflu (F, 2012)   |
|                  |                     |                     |     Xio (F, 2020)     |    Caleu (M, 2017)    |
|                  |                     |                     |                       |   Sirène (F, 2013)    |
|                  | Epinette (F, 2020)  | Beaulinge (M, 2015) |   Ramsès (M, 2019)    |   Eigouzo (M, 2015)   |
|                  |                     |                     |                       |    Yoshi (F, 2015)    |
|                  |                     |                     |   Chiper (F, 2013)    |  Gastounet (M, 2020)  |
|                  |                     |                     |                       | Trampoline (F, 2012)  |
|                  |                     |  Garance (F, 2018)  |   Octave  (M, 2018)   |  Benvengu (M, 2020)   |
|                  |                     |                     |                       |    Prune (F, 2017)    |
|                  |                     |                     |     Eve (F, 2014)     |    Youka (M, 2012)    |
|                  |                     |                     |                       |  Kalamity (F, 2020)   |
| Etoile (F, 2011) |  Sauron (M, 2021)   | QuoVadis (M, 2020)  |   Hélico (M, 2011)    |  Arlesien (M, 2020)   |
|                  |                     |                     |                       |   Kalmie (F, 2016)    |
|                  |                     |                     |   Lumière (F, 2010)   |  Talleyran (M, 2021)  |
|                  |                     |                     |                       | **Coquine (F, 2021)** |
|                  |                     | Soupolait (F, 2019) |   Darius (M, 2010)    |   Camai_2 (M, 2013)   |
|                  |                     |                     |                       |  Rutabaga (F, 2020)   |
|                  |                     |                     |  Ursulita (F, 2021)   |   Papagai (M, 2019)   |
|                  |                     |                     |                       |   Biloute (F, 2010)   |
|                  | Choupette (F, 2021) |  Faucon (M, 2012)   |    Felin (M, 2012)    |   Papagai (M, 2019)   |
|                  |                     |                     |                       |   Caxixi (F, 2014)    |
|                  |                     |                     |  Caroline (F, 2011)   |   Hussard (M, 2014)   |
|                  |                     |                     |                       |    Stich (F, 2015)    |
|                  |                     |   Anis (F, 2014)    |   Bariton (M, 2013)   |    Raimu (M, 2018)    |
|                  |                     |                     |                       |    Coach (F, 2011)    |
|                  |                     |                     |  Salopette (F, 2018)  |   Liquis (M, 2020)    |
|                  |                     |                     |                       |  Rutabaga (F, 2020)   |

bs4 dependency

must be dependency bs4

screenshot_5588

dashtable.html2data.restructify.restructify.py

may be put import at restructify function inside?

dashtable.html2rst errors with `ERROR: One of the span's rows extends beyond the bounds of the table: [[15, 0], [16, 0]]`

code

import dashtable
if __name__ == '__main__':
    # print(html_to_markdown('''
    # print(dashtable.html2md('''
    # print(dashtable.html2data('''
    print(dashtable.html2rst('''
    <table class="detailList col01" style="background-color:#fff;">
        <thead>
            <tr>
                <th></th>
                <th class="step" scope="col">
                    <div class="text">データ定額<br>440プラン</div>
                </th>
                <th scope="col">
                    <div class="text"><span class="linkTxt typeA"><a href="/domestic/service/vita" target="_blank"
                                class="bgBlue newWindow" rel="noopener noreferrer">ビタッ!<br>プラン</a></span></div>
                </th>
                <th scope="col">
                    <div class="text"><span class="linkTxt typeA"><a href="/domestic/planlp_jiyujizai_super" target="_blank"
                                class="bgBlue newWindow" rel="noopener noreferrer">自由自在<br>プラン</a></span></div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">Rakuten<br>最強プラン</div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">ahamo</div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">LINEMO</div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">povo2.0</div>
                </th>
            </tr>
            <tr style="border-top:0; padding-top:0;">
                <th style="border-left:0;"></th>
                <th class="step" scope="col">
                    <ul class="planFunctionIcon">
                        <li class="data">データ</li>
                    </ul>
                </th>
                <th scope="col">
                    <ul class="planFunctionIcon">
                        <li class="data">データ</li>
                    </ul>
                </th>
                <th scope="col">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th scope="row" colspan="8">月額基本料金</th>
            </tr>
            <tr>
                <th scope="row">~100MB<br>まで</th>
                <td rowspan="2" style="background-color:#ffffcc;"><strong>440円</strong></td>
                <td><strong>198円</strong></td>
                <td rowspan="2">
                    <div class="secBoxCompareBalloonCnt">
                        <p>100MB未満の月は<br><strong>290円!</strong></p>
                    </div>
                    <div class="text">
                        <p><strong>550円~</strong></p>
                    </div>
                </td>
                <td rowspan="4"><strong>1,078円</strong></td>
                <td rowspan="8"><strong>2,970円</strong></td>
                <td rowspan="4"><strong>990円</strong></td>
                <td rowspan="2">
                    <div class="text">
                        <p><strong>390円</strong></p>
                    </div>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">7日間</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <th scope="row">~1GB</th>
                <td rowspan="2"><strong>770円</strong></td>
            </tr>
            <tr>
                <th scope="row">~2GB</th>
                <td rowspan="2" style="background-color:#ffffcc;"><strong>580円</strong></td>
                <td rowspan="2"><strong>770円</strong></td>
                <td rowspan="2"><strong>990円</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">30日間</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <th scope="row">~3GB</th>
                <td rowspan="2"><strong>1,320円</strong></td>
            </tr>
            <tr>
                <th scope="row">~5GB</th>
                <td rowspan="2" style="background-color:#ffffcc; border:3px solid #FFCD00;"><strong>880円</strong></td>
                <td rowspan="2"><strong>990円</strong></td>
                <td rowspan="4"><strong>2,178円</strong></td>
                <td rowspan="4"><strong>2,728円</strong></td>
                <td rowspan="4"><strong>2,700円</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">30日間</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <th scope="row">~7GB</th>
                <td rowspan="2"><strong>2,310円</strong></td>
            </tr>
            <tr>
                <th scope="row">~10GB</th>
                <td rowspan="2" style="background-color:#ffffcc; border:3px solid #FFCD00;"><strong>1,980円</strong></td>
                <td rowspan="2"><strong>2,190円</strong><br>5分かけ放題付!</td>
            </tr>
            <tr>
                <th scope="row">~20GB</th>
                <td>15GBまで<br><strong>3,300円</strong></td>
            </tr>
            <tr>
                <th scope="row">~30GB</th>
                <td rowspan="2" style="background-color:#ffffcc;"><strong>4,980円</strong></td>
                <td><strong>5,775円</strong></td>
                <td rowspan="2"><strong>5,990円</strong><br>5分かけ放題付!</td>
                <td rowspan="2"><strong>3,278円</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">パートナー回線エリアは最大1Mbpsで使い放題</li>
                    </ul>
                </td>
                <td rowspan="2"><strong>4,950円</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">オプション<br>100GBまで</li>
                    </ul>
                </td>
                <td rowspan="2">+550円/1GB<br>で追加可</td>
                <td rowspan="2"><strong>6,490円</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">60GB/<br>90日間</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <th scope="row">~50GB</th>
                <td style="background-color: #f7f7f7;">+330円/1GB<br>で追加可</td>
            </tr>
            <tr>
                <th scope="row" colspan="8">通話料・オプション</th>
            </tr>
            <tr>
                <th scope="row">回線</th>
                <td style="background-color:#ffffcc;">NTTドコモ</td>
                <td>NTTドコモ<br>ソフトバンク</td>
                <td>NTTドコモ</td>
                <td>楽天</td>
                <td>NTTドコモ</td>
                <td>ソフトバンク</td>
                <td>au</td>
            </tr>
            <tr>
                <th scope="row">通話料</th>
                <td rowspan="2" style="background-color:#ffffcc;">–</td>
                <td rowspan="2">–</td>
                <td><strong>9円/30秒</strong><br>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1"><strong>専用アプリ<br>不要</strong></li>
                    </ul>
                </td>
                <td><strong>22円/30秒</strong><br>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">専用アプリ利用で国内通話かけ放題</li>
                    </ul>
                </td>
                <td><strong>22円/30秒</strong><br>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">国内通話5分まで無料</li>
                    </ul>
                </td>
                <td><strong>22円/30秒</strong></td>
                <td><strong>22円/30秒</strong></td>
            </tr>
            <tr>
                <th scope="row">通話<br>オプション<br><strong>※1</strong></th>
                <td>5分かけ放題<br><strong>500円/月</strong><br>完全かけ放題<br><strong>1,480円/月</strong></td>
                <td>15分かけ放題<br><strong>1,100円/月</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">専用アプリ不要</li>
                    </ul>
                </td>
                <td>かけ放題<br><strong>1,100円/月</strong></td>
                <td>5分/回以内<br>かけ放題<br><strong>550円/月</strong><br>通話定額<br><strong>1,650円/月</strong></td>
                <td>5分以内かけ放題<br><strong>550円/月</strong><br>通話かけ放題<br><strong>1,650円/月</strong></td>
            </tr>
            <tr>
                <th scope="row">データ追加</th>
                <td style="background-color:#ffffcc;"><strong>200円/1GB</strong></td>
                <td><strong>330円/1GB</strong></td>
                <td><strong>200円/1GB</strong></td>
                <td><strong>–</strong>
                    <ul class="list typeB">
                        <li data-number="1">0GB~無制限まで従量課金</li>
                    </ul>
                </td>
                <td><strong>550円/1GB</strong></td>
                <td><strong>550円/1GB</strong></td>
                <td><strong>390円/1GB~</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">1・3・20・60GB<br>単位で追加可</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <th scope="row">SMS追加<br><strong>※2</strong></th>
                <td style="background-color:#ffffcc; border:3px solid #FFCD00;"><strong>50円/月</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">1GB~7GBのみ</li>
                    </ul>
                </td>
                <td><strong>154円/月</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">ドコモ回線のみ</li>
                    </ul>
                </td>
                <td><strong>–</strong>
                    <ul class="list typeB">
                        <li data-number="1">月額基本料金に含まれる</li>
                    </ul>
                </td>
                <td><strong>–</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">月額基本料金に含まれる</li>
                    </ul>
                </td>
                <td><strong>–</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">月額基本料金に含まれる</li>
                    </ul>
                </td>
                <td><strong>–</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">月額基本料金に含まれる</li>
                    </ul>
                </td>
                <td><strong>–</strong>
                    <ul class="list typeB" style="margin-top: 0.1rem;">
                        <li data-number="1">月額基本料金に含まれる</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <th></th>
                <th class="step" scope="col">
                    <div class="text">データ定額<br>440プラン</div>
                </th>
                <th scope="col">
                    <div class="text"><span class="linkTxt typeA"><a href="/domestic/service/vita" target="_blank"
                                class="bgBlue newWindow" rel="noopener noreferrer">ビタッ!<br>プラン</a></span></div>
                </th>
                <th scope="col">
                    <div class="text"><span class="linkTxt typeA"><a href="/domestic/planlp_jiyujizai_super" target="_blank"
                                class="bgBlue newWindow" rel="noopener noreferrer">自由自在<br>プラン</a></span></div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">Rakuten<br>最強プラン</div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">ahamo</div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">LINEMO</div>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <div class="text">povo2.0</div>
                </th>
            </tr>
            <tr style="border-top:0; padding-top:0;">
                <th></th>
                <th class="step" scope="col">
                    <ul class="planFunctionIcon">
                        <li class="data">データ</li>
                    </ul>
                </th>
                <th scope="col">
                    <ul class="planFunctionIcon">
                        <li class="data">データ</li>
                    </ul>
                </th>
                <th scope="col">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
                <th scope="col" style="background-color: #F7F7F7;">
                    <ul class="planFunctionIcon">
                        <li class="voice">音声通話</li>
                        <li class="data">データ</li>
                        <li class="sms">SMS</li>
                    </ul>
                </th>
            </tr>
        </tbody>
    </table>
    '''))

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.