Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用vb.net将Excel表格保存为图片?_Vb.net_Excel - Fatal编程技术网

如何使用vb.net将Excel表格保存为图片?

如何使用vb.net将Excel表格保存为图片?,vb.net,excel,Vb.net,Excel,我正在尝试将excel工作表中的表保存为图片。有没有办法把那张表放到剪贴板上保存?这是我到目前为止得到的,但引用的库不在那里 提前谢谢你 -鲁本·拉米雷斯 Public Sub extract_excelTable(ByRef data_file As String, ByRef app1 As excel.Application, ByRef sheet_name As String) 'defining new app to prevent out of scope open app

我正在尝试将excel工作表中的表保存为图片。有没有办法把那张表放到剪贴板上保存?这是我到目前为止得到的,但引用的库不在那里

提前谢谢你

-鲁本·拉米雷斯

Public Sub extract_excelTable(ByRef data_file As String, ByRef app1 As excel.Application, ByRef sheet_name As String)
    'defining new app to prevent out of scope open applications
    Dim temp_app As excel.Application = app1
    Dim workbook As excel.Workbook = temp_app.Workbooks.Open(Path.GetFullPath(data_file))
    temp_app.Visible = False
    For Each temp_table As excel.DataTable In workbook.Worksheets(sheet_name)
        temp_table.Select()
        'temp_app.Selection.CopyAsPicture? 
    Next
End Sub

我不打算在这里编写任何代码,但我将为您概述一个可行的解决方案。请注意,这不会复制excel文档的格式,只需从中获取数据,并将其以与excel文件相同的列/行顺序放在图像上即可

步骤1: 我的解决方案是使用OLEDB连接从excel文件读取数据,如本文第二个示例所述:

或者,如果文档太大,无法放入计算机内存,则可能需要在excel中打开文档并将其重新保存为CSV。我有一些代码可以将CSV读入C#中的字符串列表,这可能会帮助您:

    static void Main(string[] args)
    {
        string Path = "C:/File.csv";

        System.IO.StreamReader reader = new System.IO.StreamReader(Path);

        //Ignore the header line
        reader.ReadLine();
        string[] vals;

        while (!reader.EndOfStream)
        {
            ReadText = reader.ReadLine();
            vals = SplitLine(ReadText);

            //Do some work here
        }
    }


    private static string[] SplitLine(string Line)
    {
        string[] vals = new string[42];
        string Temp = Line;

        for (int i = 0; i < 42; i++)
        {
            if (Temp.Contains(","))
            {
                if (Temp.Substring(0, Temp.IndexOf(",")).Contains("\""))
                {
                    vals[i] = Temp.Substring(1, Temp.IndexOf("\",", 1) - 1);

                    Temp = Temp.Substring(Temp.IndexOf("\",", 1) + 2);
                }
                else {
                    vals[i] = Temp.Substring(0, Temp.IndexOf(","));

                    Temp = Temp.Substring(Temp.IndexOf(",") + 1);
                }
            }
            else
            {
                vals[i] = Temp.Trim();
            }
        }

        return vals;
    }
static void Main(字符串[]args)
{
string Path=“C:/File.csv”;
System.IO.StreamReader reader=新的System.IO.StreamReader(路径);
//忽略标题行
reader.ReadLine();
字符串[]VAL;
而(!reader.EndOfStream)
{
ReadText=reader.ReadLine();
VAL=分割线(ReadText);
//在这里做些工作
}
}
私有静态字符串[]拆分行(字符串行)
{
字符串[]VAL=新字符串[42];
字符串温度=行;
对于(int i=0;i<42;i++)
{
如果(温度包含(“,”))
{
if(临时子字符串(0,临时索引(“,”)。包含(“\”))
{
VAL[i]=临时子字符串(1,临时索引(“\”,“,1)-1);
温度=温度子字符串(温度索引(“\”,“,1)+2);
}
否则{
VAL[i]=温度子字符串(0,温度索引(“,”);
温度=温度子字符串(温度索引(“,”)+1);
}
}
其他的
{
VAL[i]=温度微调();
}
}
返回VAL;
}
步骤2:
创建位图对象以创建图像,然后使用for循环将excel文档中的所有数据绘制到图像上。这篇文章有一个使用drawstring方法的示例:

我不知道
DataTable
对象是否具有此功能,但DataTable下的
Range
对象具有
CopyPicture
-您可以可以按照
rng.CopyPicture(Excel.xlPictureApearance.xlScreen、Excel.XlCopyPictureFormat.xlBitmap)执行操作
DataTable对象用于图表中;您要做的是迭代工作表.ListObjects集合。ListObject有一个Range属性,您可以使用@JohnBustos描述的方法将其复制为位图。感谢大家的响应!我引用了@TnTinMn上面建议的ListObject集合。