在 "file.html" 中将 HTML table 保存到 excel

saving HTML table in "file.html" to excel

最近有一个 Microsoft patch that broke html -> xls exports (which has since been fixed)。

我们目前的导出过程,基本上只是将中继器中的内容输出为 HTML 字符串,并将其保存为“.xls”。这反过来会在打开文件时导致 "file in different format..." 警告,并且在中断补丁之前,这很好,因为您可以确认警告,并且仍然打开文档。

已经有一个补丁修复了引入的这个功能,但无论如何,我的任务是研究一种方法,将客户端补丁级别排除在等式之外,并将其放在我们服务器的补丁级别上。实际上请求是重新创建所有导出,但我希望有更简单的方法,因为当前非常通用并且可以处理。无论如何...

test.html:

<html>
    <head>
        <title>Test Title</title>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <td>Test Row 1</td>
                    <td>Test Row 2</td>
                </tr>
            </thead>
            <tbody>
                <tr><td>0</td><td>Test 0</td></tr>
                <tr><td>1</td><td>Test 1</td></tr>
                <tr><td>2</td><td>Test 2</td></tr>
                <tr><td>3</td><td>Test 3</td></tr>
                <tr><td>4</td><td>Test 4</td></tr>
                <tr><td>5</td><td>Test 5</td></tr>
                <tr><td>6</td><td>Test 6</td></tr>
                <tr><td>7</td><td>Test 7</td></tr>
                <tr><td>8</td><td>Test 8</td></tr>
                <tr><td>9</td><td>Test 9</td></tr>
                <tr><td>10</td><td>Test 10</td></tr>
                <tr><td>11</td><td>Test 11</td></tr>
                <tr><td>12</td><td>Test 12</td></tr>
                <tr><td>13</td><td>Test 13</td></tr>
                <tr><td>14</td><td>Test 14</td></tr>
                <tr><td>15</td><td>Test 15</td></tr>
                <tr><td>16</td><td>Test 16</td></tr>
                <tr><td>17</td><td>Test 17</td></tr>
                <tr><td>18</td><td>Test 18</td></tr>
                <tr><td>19</td><td>Test 19</td></tr>
                <tr><td>20</td><td>Test 20</td></tr>
                <tr><td>21</td><td>Test 21</td></tr>
                <tr><td>22</td><td>Test 22</td></tr>
                <tr><td>23</td><td>Test 23</td></tr>
                <tr><td>24</td><td>Test 24</td></tr>
            </tbody>
        </table>
    </body>
</html>

在 excel:

中打开的看起来像这样

我正在(尝试)使用 excel 互操作,打开文件,并将其重新保存为 xls/xlsx 扩展名(希望它类似于手册 "save as"来自 excel),此时关于不同文档格式的警告将消失(希望如此)。

我还以为会这么简单:

string htmlFilePathAndName = @"C:/test.html";
string newXlsxFilePathAndName = @"C:/test.xlsx";

Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook xls;
xls = excel.Workbooks.Open(htmlFilePathAndName);
xls.SaveAs(newXlsxFilePathAndName, XlFileFormat.xlOpenXMLWorkbook); // exception

但我得到一个例外:

Unhandled Exception: System.Runtime.InteropServices.COMException: Microsoft Exce l cannot access the file 'C://7A133BE0'. There are several possible reasons:

The file name or path does not exist.

The file is being used by another program.

The workbook you are trying to save has the same name as a currently open workb ook.

at Microsoft.Office.Interop.Excel._Workbook.SaveAs(Object Filename, Object Fi leFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, O bject AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)

我不确定“7A133BE0”的来源,但我猜它是一个临时工作文件,因为每次尝试时值都会改变 运行。

有没有其他方法可以以编程方式完成我想做的事情?我真的很想避免尝试在视图模型中重新创建网站表并尝试找到一种通用方法来在 closedxml

中写出所述视图模型

问题出在文件路径上 @"C:/test.html"; @"C:/test.xlsx";

应该是

@"C:\test.html"; @"C:\test.xlsx";

如果对您有帮助,请给答案打分。