相关疑难解决方法(0)

Excel Interop - 效率和性能

我想知道我可以做些什么来提高Excel自动化的性能,因为如果你在工作表中有很多事情,它可能会很慢......

这里有一些我发现自己:

  • ExcelApp.ScreenUpdating = false - 关闭重绘屏幕

  • ExcelApp.Calculation = Excel.XlCalculation.xlCalculationManual - 关闭计算引擎,以便Excel在单元格值更改时不会自动重新计算(在完成后将其重新打开)

  • 减少对Worksheet.Cells.Item(row, col)和的调用Worksheet.Range- 我不得不轮询数百个单元格以找到我需要的单元格.实现一些单元格位置的缓存,将执行时间从大约40秒减少到大约5秒.

什么样的互操作会对性能造成严重影响,应该避免?你还能做些什么来避免不必要的处理?

c# excel performance interop vsto

62
推荐指数
5
解决办法
3万
查看次数

将数组写入Excel范围

我目前正在尝试使用以下代码将对象数组中的数据写入Excel中的范围,其中objData只是一个字符串数组:

private object m = System.Type.Missing;
object[] objData = getDataIWantToWrite();

Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
rn_Temp.value2 = objData;
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作,问题是范围被填满但是每个单元格都获得了第一个项目的值objData.

逆向工作,即

private object m = System.Type.Missing;
object[] objData = new object[x,y]

Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
objData = (object[])rn_Temp.value2;
Run Code Online (Sandbox Code Playgroud)

将返回一个包含工作表中所有值的数组,所以我不确定为什么阅读和赋值的工作方式不同.

有没有人成功地做过这件事?我目前正逐个单元地编写阵列,但它需要处理很多(> 50,000)行,因此非常耗时.

c# excel interop

51
推荐指数
3
解决办法
11万
查看次数

如何将一些数据写入excel文件(.xlsx)

这就是我想要做的.

1.创建excel文件(.xlsx)c://test/files/work1_4.13.14.xlsx,名称为+值(日期)

例如:work1_4.13.14.xlsx

2.将标题设置为文件示例:[名称] [年龄] [城市].

3.我有3个名单,年龄,城市,我需要填写excel表.

这是我的目标

Name   Age  City
Ben    20   xyz
Jack   25   xyz
Mike   45   zyx
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# asp.net

47
推荐指数
4
解决办法
25万
查看次数

使用c#中的Open Xml SDK将DataTable导出到Excel

对不起我的英文请.我是开放式xml sdk的新手.我的程序能够将一些数据和DataTable导出到Excel文件(模板)在模板中,我将数据插入到一些占位符中.它的工作非常好,但我也需要插入一个DataTable ...我的示例代码:

using (Stream OutStream = new MemoryStream())
{
    // read teamplate
    using (var fileStream = File.OpenRead(templatePath))
        fileStream.CopyTo(OutStream);

    // exporting
    Exporting(OutStream);

    // to start
    OutStream.Seek(0L, SeekOrigin.Begin);

    // out
    using (var resultFile = File.Create(resultPath))
        OutStream.CopyTo(resultFile);
Run Code Online (Sandbox Code Playgroud)

下一个导出方法

private void Exporting(Stream template)
{
    using (var workbook = SpreadsheetDocument.Open(template, true, new OpenSettings                          { AutoSave = true }))
    {
        // Replace shared strings
        SharedStringTablePart sharedStringsPart = workbook.WorkbookPart.SharedStringTablePart;
        IEnumerable<Text> sharedStringTextElements = sharedStringsPart.SharedStringTable.Descendants<Text>();

        DoReplace(sharedStringTextElements);
        // Replace inline strings
        IEnumerable<WorksheetPart> worksheetParts = workbook.GetPartsOfType<WorksheetPart>();

        foreach (var worksheet in …
Run Code Online (Sandbox Code Playgroud)

c# excel openxml openxml-sdk

41
推荐指数
3
解决办法
11万
查看次数

如何在按钮点击时立即将dataGridView数据导出到Excel?

我的数据网格视图中有10k行和15列.我想将此数据导出到excel表单o按钮.我已经尝试过以下代码.

private void btExport_Click(object sender, EventArgs e)
    {
        Microsoft.Office.Interop.Excel._Application app  = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel._Workbook workbook =  app.Workbooks.Add(Type.Missing);        
        Microsoft.Office.Interop.Excel._Worksheet worksheet = null;                   
        app.Visible = true;
        worksheet = workbook.Sheets["Sheet1"];
        worksheet = workbook.ActiveSheet;                  
        for(int i=1;i<dataGridView1.Columns.Count+1;i++)
        {
             worksheet.Cells[1, i] = dataGridView1.Columns[i-1].HeaderText;
        }    
        for (int i=0; i < dataGridView1.Rows.Count-1 ; i++)
        {
            for(int j=0;j<dataGridView1.Columns.Count;j++)
            {
                if (dataGridView1.Rows[i].Cells[j].Value != null)
                {
                    worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                }
                else
                {
                    worksheet.Cells[i + 2, j + 1] = "";
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这对我有用, …

c# datagridview copy export-to-excel export-to-csv

41
推荐指数
4
解决办法
16万
查看次数

如何在.c#中将.json文件转换为excel

我想将.json文件转换为excel.我无法使用c#语言在任何地方找到这些问题的解决方案.任何人都可以帮助我解决这些问题以及确切的解决方案.

c#-4.0

5
推荐指数
2
解决办法
3万
查看次数

EPPlus - LoadFromCollection - 文本转换为数字

我正在用C#编写一个需要导出List<MyObject>到Excel的程序,我正在使用EPPlus这样做.

我的挑战是我的对象有一个属性:

string Prop1 { get; set; }
Run Code Online (Sandbox Code Playgroud)

并且,我需要导出的值之一具有一个值,例如,其形式为Prop1 = "123E4".

挑战在于EPPlus LoadFromCollection方法将其导出到Excel,但Excel使用科学记数法(Outputted value = 1.23E+061230000)将其转换为数字.

我已经尝试将整个列设置为.Style.Numberformat.Format = "@"(以及我能想到的任何其他样式),我甚至尝试在LoadFromCollection调用方法之前和之后设置样式.

我也尝试在字符串前面添加一个'字符,但实际上该字符在该列中的每个单元格中保留,然后使得值不正确以进行分析.

我正在玩我的List转换为DataTable以便使用该LoadFromDataTable方法,但即使这似乎不起作用.

关于如何将其导出为纯文本的任何想法/建议

.net c# excel formatting epplus

5
推荐指数
1
解决办法
3684
查看次数

将DataTable导出到Excel

可能重复:
如何在C#中将DataTable导出到Excel

我的TemplateExcel包含在我的项目中,我想将我的数据表导出到Excel,我想复制并保存这个模板,数据到处都想保存,我该怎么办?

c# excel

3
推荐指数
1
解决办法
3万
查看次数

将SQL数据导出到Excel非常慢

我正在将SQL数据导出到Excel.我目前使用的代码是:

    DataTable dt = new DataTable();
            // Create sql connection string
            string conString = "Data Source=DELL\\SQLSERVER1;Trusted_Connection=True;DATABASE=Zelen;CONNECTION RESET=FALSE";

            SqlConnection sqlCon = new SqlConnection(conString);
            sqlCon.Open();


            SqlDataAdapter da = new SqlDataAdapter("select LocalSKU,ItemName, QOH,Price,Discontinued,CAST(Barcode As varchar(25)) As Barcode,Integer2,Integer3,ISNULL(SalePrice,0.0000)AS SalePrice,SaleOn,ISNULL(Price2,0.0000)AS Price2 from dbo.Inventory", sqlCon);

            System.Data.DataTable dtMainSQLData = new System.Data.DataTable();

            da.Fill(dtMainSQLData);
            DataColumnCollection dcCollection = dtMainSQLData.Columns;

            // Export Data into EXCEL Sheet
            Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
            ExcelApp.Application.Workbooks.Add(Type.Missing);



            int i = 1;
            int j = 1;
            int s = 1;
            //header row
            foreach (DataColumn col in dtMainSQLData.Columns) …
Run Code Online (Sandbox Code Playgroud)

c# export export-to-excel sql-server-2008-r2

0
推荐指数
1
解决办法
6404
查看次数